導讀:在java8無序不重複集合,是通過HashSet類實作。今天我們來閱讀HashSet這個類,簡單分析一下,來進一步的認識它。
類成員
//借助HashMap實作的.
private transient HashMap<E,Object> map;
// 這個就是HashMap中key-value中的value
private static final Object PRESENT = new Object();
在HashMap中key是做了重複處理的,保證不會重複,PRESENT這個就是一個value值,作用就是傳參占位。
建立對象 new HashMap()
public HashSet() {
//HashMap預設長度是16
map = new HashMap<>();
}
//Collection類型資料
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
//一次性的指派
addAll(c);
}
//定義map的長度,和負載因子
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
//定義map的長度
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
//dummy作用:差別不同的構造方法
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
//LinkedHashMap是HashMap的派生類
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
添加元素 add()
//調用map.put方法,儲存元素。key值為E類型,value值為PRESENT(Object)
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
移除元素 remove()
//調用map.remove方法,儲存元素
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
最後,這個類的封裝是非常簡單的,前提是熟悉HashMap類實作,點選這兒可以去認識一下。
點個贊呗 ≧◠◡◠≦