1 LinkedHashSet
1.1 底层结构
LinkedHashSet是基于LinkedHashMap实现的,所以LinkedHashSet的数据结构就是LinkedHashMap的数据结构。
2 四个关注点
关注点 | 结论 |
---|---|
LinkedHashSet是否允许空 | 允许 |
LinkedHashSet是否允许重复数据 | 不允许(键不允许重复) |
LinkedHashSet是否有序 | 有序 |
LinkedHashSet是否线程安全 | 非线程安全 |
3 LinkedHashSet源码解析
3.1 类的继承关系
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable
说明:LinkedHashSet继承自HashSet,也实现了一些接口。
3.2 类的属性
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
// 版本序列号
private static final long serialVersionUID = -2851667679971038690L;
}
3.3 类的构造函数
LinkedHashSet会调用HashSet的父类构造函数,让其底层实现为LinkedHashMap,这样就很好的实现了LinkedHashSet所需要的功能。
1. LinkedHashSet(int initialCapacity, float loadFactor)型构造函数
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
2. LinkedHashSet(int initialCapacity)型构造函数。
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
3. LinkedHashSet()型构造函数。
public LinkedHashSet() {
super(16, .75f, true);
}
4. LinkedHashSet(Collection<? extends E> c)型构造函数。
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}