HashSet 內部實現

HashSet 內部通過HasMap 實現

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

增加一個元素:

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

HashSet 內部定義一個PRESENT,來保證元素的唯一

    private static final Object PRESENT = new Object();
當增加一個元素,HashSet內部調用HashMap的put方法:

    public V put(K key, V value) {
        if (table == EMPTY_TABLE) {
            inflateTable(threshold);
        }
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key);
        int i = indexFor(hash, table.length);
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }
HashSet取值:

    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }

實際取的是HashMap的key

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