天天看點

java8中HashSet無序集合的簡單認識類成員建立對象 new HashMap()添加元素 add()移除元素 remove()

導讀:在java8無序不重複集合,是通過HashSet類實作。今天我們來閱讀HashSet這個類,簡單分析一下,來進一步的認識它。

類成員

//借助HashMap實作的.
    private transient HashMap<E,Object> map;

    // 這個就是HashMap中key-value中的value
    private static final Object PRESENT = new Object();
           

  在HashMap中key是做了重複處理的,保證不會重複,PRESENT這個就是一個value值,作用就是傳參占位。

建立對象 new HashMap()

public HashSet() {
        //HashMap預設長度是16
        map = new HashMap<>();
    }

    //Collection類型資料
    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        //一次性的指派
        addAll(c);
    }

    //定義map的長度,和負載因子
    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

    //定義map的長度
    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }


    //dummy作用:差別不同的構造方法
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        //LinkedHashMap是HashMap的派生類
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }
           

添加元素 add()

//調用map.put方法,儲存元素。key值為E類型,value值為PRESENT(Object)
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
           

移除元素 remove()

//調用map.remove方法,儲存元素
    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
           

最後,這個類的封裝是非常簡單的,前提是熟悉HashMap類實作,點選這兒可以去認識一下。

點個贊呗 ≧◠◡◠≦