简述 HashSet 实现原理
# 简述 HashSet 实现原理
底层结构是 HashMap 。value都是存放同一个虚拟对象。
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable {
static final long serialVersionUID = -5024744406713321676L;
private transient HashMap<E,Object> map;
// 虚拟对象
private static final Object PRESENT = new Object();
// 无参构造
public HashSet() {
map = new HashMap<>();
}
// 集合构造
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
// 初始化容量及负载因子构造
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
// 初始化容量构造
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
// 由于默认修饰符,同包可访问,我们用不到,在LinkedLinkedHashMap中有具体应用,后期会讲解
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
编辑 (opens new window)
上次更新: 2022/05/19, 21:26:01