java hashset 原理

1、首先看它的類結構

public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable

從類結構來看,它是比較簡單的,主要還是實現了Set的相關接口,其他的沒有什麼特別的地方,這裏看它支持clone方法,但是注意所有的集合類型在克隆自定義的對象元素時,實際上都是淺拷貝,使用的時候需要特別注意。

2、關鍵屬性

    private transient HashMap<E,Object> map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

從這兩個關鍵熟悉可以看出,實際上hashset就是基於hashmap實現的,只是value是一個固定的PRESENT對象而已,這樣整個實現還是比較好理解的,因爲hashmap的key是不允許重複,那麼基於這點我們正好可以用來實現Set中值不能重複的需求。

3、關鍵方法

public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

使用的最頻繁的add方法,實際底層就是調用了map的put方法而已,這裏主要是要注意一下PRESENT它對於所有的Value值都是一樣的。

總結,hashset的整個原理還是比較清晰的,只有明白了hashmap的原理,hashset就沒有什麼特別的地方,它就是一個value固定的hashmap而已。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章