简介
HashSet是一个基于HashMap实现的无重复元素的集合。
原理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
/**
* Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
* default initial capacity (16) and load factor (0.75).
*/
public HashSet() {
map = new HashMap<>();
}
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
HashSet内部使用了HashMap来实现功能,HashMap的Key来作为无重复的区分。put进来的元素储存在Map的Key中,Value固定为Object用来区分空的情况。 预留了一个defalut范围的构造函数,用于LinkedHashSet来使用,保证可以和Map类似,保留插入顺序。