1、简述
- 本篇内容我们来聊聊我们日常开发中经常使用的一个类 LinkedHashSet,相信大家都不陌生。
2、归纳
- 继承于 HashSet,基于 LinkedHashMap 实现的,有序(插序),不可重复,允许 null 的存在。
- 默认容量为16,负载因子0.75,其实内部就是包装了一个 HashMap,HashMap 的 key 放的是其存入的值,value 放的是一个 Object 对象。
- 单线程安全,多线程不安全。
3、分析
- 由于 LinkedHashSet 源码较小,主要功能都在 HashSet 和 HashMap 类已经实现,所以咱们直接看源码。
public class LinkedHashSet<E> extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
private static final long serialVersionUID = -2851667679971038690L;
public LinkedHashSet() {
super(16, .75f, true);
}
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2 * c.size(), 11), .75f, true);
addAll(c);
}
@Override
public Spliterator<E> spliterator() {
return Spliterators.spliterator(this, Spliterator.DISTINCT | Spliterator.ORDERED);
}
}