一 概述
LinkedHashSet在Java 8中的繼承關系圖
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLsJlMipWNXplZxckYo5kMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2MDN2EDM0ITM2ETMwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
LinkedHashSet在Java 8中的源碼
public class LinkedHashSet<E>
extends HashSet<E>
implements Set<E>, Cloneable, java.io.Serializable {
......
}
根據源碼可知,LinkedHashSet實作了Set接口,是以LinkedHashSet中的資料是不可以重複存在的,此外LinkedHashSet中資料的疊代順序是已知的。
二 LinkedHashSet的實作
LinkedHashSet中構造方法源碼
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構造方法所繼承的構造方法源碼,也是實際的構造方法
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
有源碼可知,LinkedHashSet提供了四個通過傳入辨別參數并調用父類HashSet中的構造器的構造方法,實際是通過LinkedHashMap的執行個體來實作其實際功能。
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>{ ...... }
LinkedHashMap為HashMap的一個子類,能夠儲存記錄的插入順序,這樣使得我們周遊的時候同我們插入的順序一緻。
三 LinkedHashSet總結
由于LinkedHashSet的實作通過父類HashSet,底層通過LinkedHashMap來實作,是以在同HashSet相同的操作,可以直接通過HashSet來實作。