容器源码解析之LinkedHashSet(六)
生活随笔
收集整理的這篇文章主要介紹了
容器源码解析之LinkedHashSet(六)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于LinkedHashSet而言,它繼承與HashSet、又基于LinkedHashMap來實現的。
LinkedHashSet底層使用LinkedHashMap來保存所有元素,它繼承與HashSet,其所有的方法操作上又與HashSet相同,因此LinkedHashSet 的實現上非常簡單,只提供了四個構造方法,并通過傳遞一個標識參數,調用父類的構造器,底層構造一個LinkedHashMap來實現,在相關操作上與父類HashSet的操作相同,直接調用父類HashSet的方法即可。LinkedHashSet的源代碼如下:
public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable { private static final long serialVersionUID = -2851667679971038690L; /** * 構造一個帶有指定初始容量和加載因子的新空鏈接哈希set。 * * 底層會調用父類的構造方法,構造一個有指定初始容量和加載因子的LinkedHashMap實例。 * @param initialCapacity 初始容量。 * @param loadFactor 加載因子。 */ public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor, true); } /** * 構造一個帶指定初始容量和默認加載因子0.75的新空鏈接哈希set。 * * 底層會調用父類的構造方法,構造一個帶指定初始容量和默認加載因子0.75的LinkedHashMap實例。 * @param initialCapacity 初始容量。 */ 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); } }在父類HashSet中,專為LinkedHashSet提供的構造方法如下,該方法為包訪問權限,并未對外公開。
* 以指定的initialCapacity和loadFactor構造一個新的空鏈接哈希集合。 * 此構造函數為包訪問權限,不對外公開,實際只是是對LinkedHashSet的支持。 * * 實際底層會以指定的參數構造一個空LinkedHashMap實例來實現。 * @param initialCapacity 初始容量。 * @param loadFactor 加載因子。 * @param dummy 標記。 */ HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor); }總結
以上是生活随笔為你收集整理的容器源码解析之LinkedHashSet(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 容器源码分析之TreeSet(五)
- 下一篇: 容器源码解析之HashMap(七)