天天看點

LinkedHashSet源碼閱讀回顧

一 概述

LinkedHashSet在Java 8中的繼承關系圖

LinkedHashSet源碼閱讀回顧

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來實作。