1. 程式人生 > >Collection容器家族(LinkedHashSet原始碼詳解)

Collection容器家族(LinkedHashSet原始碼詳解)

一、在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的方法即可。