Java源碼系列 -- HashSet

一、類簽名

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

二、數(shù)據(jù)成員

HashSet利用HahsMap來實(shí)現(xiàn)集合的特性。利用HahsMap存儲(chǔ)key的哈希值去重,如果鍵key對(duì)應(yīng)的值部非空,表明這個(gè)key存在。

private transient HashMap<E,Object> map;

一個(gè)常量對(duì)象,在HahsMap的value中起到占位的作用。

private static final Object PRESENT = new Object();

三、構(gòu)造方法

構(gòu)造全新的、空的集合,利用HashMap實(shí)例來實(shí)現(xiàn),初始化大小為16,負(fù)載因子0.75

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

利用給定集合包含的元素來構(gòu)造新的集合,HashMap實(shí)例初始化大小為16,負(fù)載因子0.75

public HashSet(Collection<? extends E> c) {
    map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}

通過指定大小的容量值和負(fù)載因子來初始化一個(gè)內(nèi)部HashMap.

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

通過指定大小的容量值來初始化一個(gè)內(nèi)部HashMap,負(fù)載因子默認(rèn)值為0.75

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

這個(gè)構(gòu)造函數(shù)使用LinkedHashMap,構(gòu)造參數(shù)多了一個(gè)無用的布爾值,用于區(qū)分上面的構(gòu)造方法。LinkedHashMap實(shí)現(xiàn)的HashMap是有序的。

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<>(initialCapacity, loadFactor);
}

四、成員方法

返回一個(gè)迭代器,迭代器指示的元素沒有固定順序。

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

返回集合中包含元素的數(shù)量。

public int size() {
    return map.size();
}

如果容器中沒有任何元素,返回true。

public boolean isEmpty() {
    return map.isEmpty();
}

檢查集合中是否包含指定元素。

public boolean contains(Object o) {
    return map.containsKey(o);
}

若集合不包含該元素e,成功插入返回true。集合中已包含指定元素,則原集合不會(huì)改變,并返回false。

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

從集合中移除指定元素

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

清空集合中所有元素

public void clear() {
    map.clear();
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容