java 源碼閱讀(五)HashSet

java 源碼閱讀(五)HashSet

HashSet是一個無序,允許空值,不允許重複值的集合類。非線程安全類。

繼承/實現

在這裏插入圖片描述

構造函數

private transient HashMap<E,Object> map;
private static final Object PRESENT = new Object();

HashSet()

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

可以看出,hashSet的底層實現是一個HashMap

HashSet(int)

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

HashSet(int,float)

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

HashSet(int,float,boolean)

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

專屬於linkedHashSet的構造函數。

方法源碼解讀

add(E)

public boolean add(E e) {
  	//在map中添加了一個key爲E,value爲PRESENT的對象。
    return map.put(e, PRESENT)==null;
}

remove(E)

public boolean remove(Object o) {
  	//直接調用HashMap的remove方法
    return map.remove(o)==PRESENT;
}

contains(Object)

public boolean contains(Object o) {
  	//直接調用HashMap的containsKey()方法
    return map.containsKey(o);
}

源碼中都是直接調用HashMap的方法,比較簡單。

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