1、主要的构造
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
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,构造都是调用父类的构造
HashSet的构造
public HashSet() {
map = new HashMap<>();
}
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
从上面可以看出,当LinkedHashSet使用无参构造实例化时,回调用父类HashSet的三个参数的构造,而调用父类的三个参数的构造,默认创建的是LinkedHashMap的实例。
而HashSet使用无参构造创建的实例是HashMap的实例。
LinkedHashSet的构造可以看出,全部都是调用父类的三个参数的构造,因此LinkedHashSet创建的实例都是LinkedHashMap