LinkedHashSet
- 基于LinkedHashMap实现。用LinkedHashMap作为数据存储,保证了元素迭代的顺序,即插入顺序。
- 继承 HashSet,其内部只定义spliterator()方法。可以直接调用父类HashSet的方法。
- LinkedHashSet只能实现插入顺序,不能实现访问顺序。
源码分析
LinkedHashSet继承HashSet
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
构造器
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
public LinkedHashSet() {
super(16, .75f, true);
}
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
可以看到LinkedHashSet的构造器都调用了父类HashSet的HashSet(int initialCapacity, float loadFactor, boolean dummy)构造器new了一个LinkedHashMap。因此LinkedHashSet 和LinkedHashMap 两个集合在实现本质上是相同的。但new LinkedHashMap时,并没有设置accessOrder,所以LinkedHashSet只能实现插入顺序,不能实现访问顺序。(这个不太确定)