简介
set接口的hash表和链表的实现,和HashSet不一样的地方是维护了一个双向链表记录插入顺序,请注意仅仅是插入顺序。
类图
代码
-- 你没看错 就这么多代码 关键点在 继承HashSet
public class LinkedHashSet<E> extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
private static final long serialVersionUID = -2851667679971038690L;
-- 这四个构造调用同一个父类构造
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);
}
public Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.DISTINCT | Spliterator.ORDERED);
}
}
--让我们看看 HashSet为LinkedHashSet特意写的构造方法
--权限是包权限 实现是一个LinkedHashMap,最后那个dummy参数只是为了区分其他构造
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
总结
使用LinkedHashMap实现
有序,按照插入顺序排序