Java源碼分析-HashSet

HashSet的代碼量還是很少的,將主要的操作都委托給了HashMap。基于JDK1.8。
支持原創(chuàng),轉(zhuǎn)載請注明出處。

繼承關(guān)系

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

public interface Set<E> extends Collection<E>

可以看到Set實現(xiàn)了Collection接口。

核心成員變量

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內(nèi)部封裝了HashMap,后面將會看到很多操作都委托給了HashMap。

構(gòu)造函數(shù)

    public HashSet() {
        map = new HashMap<>();
    }

   public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

構(gòu)造函數(shù)也很簡單,僅僅是初始化HashMap。

添加元素:add方法

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

將參數(shù)e作為key,PRESENT作為value,我們知道key在HashMap里面是唯一的,也就保證了set元素的唯一性。

刪除元素:remove方法

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

還是將任務(wù)委托給HashMap。

支持原創(chuàng),轉(zhuǎn)載請注明出處。
github:https://github.com/gatsbydhn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容