LinkedHashSet
概述
LinkedHashSet
继承自 HashSet
,不同的是内部使用的 HashMap
为 LinkedHashMap
,通过LinkedHashMap
可以按照插入顺序排序和访问顺序排序的特性,实现集合中元素的有序访问。
类图
构造方法
LinkedHashSet
通过调用父类 HashSet
提供的专用构造方法,将内部的 HashMap
初始化为 LinkedHashMap
,利用其特性来实现元素的可排序。
java
// LinkedHashSet.java
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.java
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
中用 LinkedHashMap
初始化内部 HashMap 的方法:
java
// HashSet.java
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
// HashSet.java
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}