在分析LinkedHashSet的时候,先看一下它的继承关系安全
能够看到LinkedHash继承自HashSet,即拥有HashSet的所有属性,接着来看一下源码中的注释bash
看到这里,感受其实跟HashSet一个套路,底层都不是本身实现的,而是经过内部实现的一个LinkedHashMap来维护的,所谓HashSet取地是HashMap的key,HashSet取地是LinkedHashMap的Key,下面从源码的角度来验证一下。ui
就一个序列化Id,其他的所有继承自HashSetspa
private static final long serialVersionUID = -2851667679971038690L;复制代码
public LinkedHashSet() {
super(16, .75f, true);
}
public LinkedHashSet() {
super(16, .75f, true);
}
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
public LinkedHashSet() {
super(16, .75f, true);
}复制代码
能够发现,无论是调用哪个构造方法,最后调用的都是调用的同一个父类方法,也就是上一篇HashSet中的一个LinkedHashMap的初始化方法,最终仍是初始化了一个LinkedHashMap线程
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}复制代码
当我还想继续查看的时候,发现其实已经没有能够分析的了,没有复写HashSet的其它方法,因此,LinkedHashSet内部没有作过不少的实现,只是调用了HashSet的初始化LinkedHashMap的构造方法,剩余的操做跟HashSet其实是同样的,没有什么区别。code