源码分析

我们分析过了 HashMap 及 HashSet, 本想着不再看 LinkedHashSet 了, 无非继承就是以 LinkedHashMap 进行存储呗。 但是点进去让我怀疑了好久, 以为新版本的源码有问题呢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, Serializable {
private static final long serialVersionUID = -2851667679971038690L;

public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}

public LinkedHashSet(int initialCapacity) {
super(initialCapacity, 0.75F, true);
}

public LinkedHashSet() {
super(16, 0.75F, true);
}

public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2 * c.size(), 11), 0.75F, true);
this.addAll(c);
}

public Spliterator<E> spliterator() {
return Spliterators.spliterator(this, 17);
}
}

以上就是 LinkedHashSet 的所有源码, 怎么可能 LinkedHashMap 的影子呢。 怪了找了好久, 还百度了, 才发现, 其父类的构造方法里点进去

1
2
3
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}

明白了吧, 存储容器是一个 LinkedHashMap 呢, 所以呢不再分析啦哈