HashSet的代碼量還是很少的,將主要的操作都委托給了HashMap。基于JDK1.8。
支持原創(chuàng),轉(zhuǎn)載請注明出處。
繼承關(guān)系
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializabl
public interface Set<E> extends Collection<E>
可以看到Set實現(xiàn)了Collection接口。
核心成員變量
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
可以看到HashSet內(nèi)部封裝了HashMap,后面將會看到很多操作都委托給了HashMap。
構(gòu)造函數(shù)
public HashSet() {
map = new HashMap<>();
}
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
構(gòu)造函數(shù)也很簡單,僅僅是初始化HashMap。
添加元素:add方法
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
將參數(shù)e作為key,PRESENT作為value,我們知道key在HashMap里面是唯一的,也就保證了set元素的唯一性。
刪除元素:remove方法
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
還是將任務(wù)委托給HashMap。
支持原創(chuàng),轉(zhuǎn)載請注明出處。
github:https://github.com/gatsbydhn