HashSet源码分析

1. HashSet是使用HashMap来实现的spa

public HashSet() {
    map = new HashMap<>();
}

private transient HashMap<E,Object> map;  

// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();   //虚拟值,用来表示hashMap中的value值,在set中的值都是以key的形式存储在hashMap中
public boolean add(E e) {       //add()方法将元素做为key,并以PRESENT为value存入HashMap中 return map.put(e, PRESENT)==null;
    }

2. 总结code

  (1)因为在hashMap中key不能够重复因此HashSet中的元素不可重复。blog

  (2)同理hashMap中容许key为null,所以HashSet中的key也能够是null。ci

  (3)LinkedHashSet是使用LinkedHashMap实现的,原理类似。hash

  (4)TreeSet是使用NavigbleMap来实现的,原理同上。it

相关文章
相关标签/搜索