在分析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