LinkedHashSet与HashSet相比可以可以保存元素有序,在一些要求元素不能重复又要有序读取的场景下很有用。保持元素有序的逻辑实际上仍然是HashSet实现的,LinkedHashSet只是继承了HashSet,调用了HashSet的构造方法仍然。
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);
}
LinkedHashSet类中只定义了4个构造方法,另一个方法是新增的spliterator用来遍历的,在此不多说。而这4个构造方法内部都调用了父类的一个构造方法,实际上最终靠的LinkedHashMap来实现有序
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}