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的方法,比較簡單。