Collection容器家族(LinkedHashSet原始碼詳解)
阿新 • • 發佈:2018-11-08
一、在Collection集合體系中的位置及概述
LinkedHashSet 是非同步的有序的,分別是插入順序和訪問順序,LinkedHashSet的有序性可參考LinkedHashMap的有序性,繼承於HashSet,內部基於LinkedHashMap實現的,也就是說LinkedHashSet和HashSet一樣只儲存一個值,LinkedHashSet和LinkedHashMap一樣維護著一個運行於所有條目的雙向連結串列。
二、構造方法
/** * 構造一個帶有指定初始容量和載入因子的新空連結雜湊set。 * * 底層會呼叫父類的構造方法,構造一個有指定初始容量和載入因子的LinkedHashMap例項。 * @param initialCapacity 初始容量。 * @param loadFactor 載入因子。 */ public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor, true); } public LinkedHashSet(int initialCapacity) { super(initialCapacity, .75f, true); } /** * 構造一個帶預設初始容量16和載入因子0.75的新空連結雜湊set。 * * 底層會呼叫父類的構造方法,構造一個帶預設初始容量16和載入因子0.75的LinkedHashMap例項。 */ public LinkedHashSet() { super(16, .75f, true); } /** * 構造一個與指定collection中的元素相同的新連結雜湊set。 * * 底層會呼叫父類的構造方法,構造一個足以包含指定collection * 中所有元素的初始容量和載入因子為0.75的LinkedHashMap例項。 * @param c 其中的元素將存放在此set中的collection。 */ public LinkedHashSet(Collection<? extends E> c) { super(Math.max(2*c.size(), 11), .75f, true); addAll(c); }
三、總結
LinkedHashSet底層使用LinkedHashMap來儲存所有元素,它繼承於HashSet,其所有的方法操作上又與HashSet相同,因此LinkedHashSet的實現上非常簡單,只提供了四個構造方法,並通過傳遞一個標識引數,呼叫父類的構造器,底層構造一個LinkedHashMap來實現,在相關操作上與父類HashSet的操作相同,直接呼叫父類HashSet的方法即可。