jdk-HashSet

劉二郎發表於2018-07-12

因為最近去看了下jdk1.8的HashMap,因此我又順便去學些了下HashSet,平時用的也比較多。

用法:當需要儲存不能重複的元素時用到的。

翻看原始碼:(有點驚訝)

建構函式:

    /**
     * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
     * default initial capacity (16) and load factor (0.75).
     */
    public HashSet() {
        map = new HashMap<>();
    }

噹噹,建構函式裡面使用的是HashMap,也就是說它利用了HashMap的特性來解決它所想解決的問題。

add方法:

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

我們需要新增的資料是e,但是HashSet內,構造了一個鍵值對<e,new Object>來插入到HashMap中,我們知道對於HashMap來說,新插入的資料只會返回null,而已存在的鍵值對,會返回舊值。因此如果add返回true,說明之前沒有插入過類似的值,如果返回false,意味著之前存在值。

remove方法:

    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

以上是基於jdk1.7的程式碼。1.8程式碼也沒啥區別,不看了,偷個懶。這一篇有點瞎,但是還是記錄下來吧。