Collection集合-05.HashSet
阿新 • • 發佈:2020-10-10
在集合使用中,我們經常會用到HashSet,一般用於過濾一組資料,保證資料唯一。今天看一下HashSet的原始碼,之前看過HashMap,再來看,HashSet可以說是很簡單了。
原始碼分析
初始化
-
底層是通過HashMap儲存資料的。
-
PRESENT成員變數用於HashMap的value值
private transient HashMap<E,Object> map; private static final Object PRESENT = new Object(); public HashSet() { map = new HashMap<>(); }
增刪改查操作
- 增加操作
public boolean add(E e) {
return map.put(e, PRESENT)==null;//判斷是否首次插入資料
}
- 刪除操作
public boolean remove(Object o) {
return map.remove(o)==PRESENT;//判斷刪除的資料是否預給定的資料
}
- 資料查詢(通過HashMap主鍵遍歷)
public Iterator<E> iterator() {
return map.keySet().iterator();
}
總結
-
通過上面其實也不難看出來,HashSet和HashMap的緣分不淺。
-
HashSet中儲存的資料是存放在HashMap的key,value都是同一個靜態成員變數;
-
由於上面說的特性,HashSet中存放的資料是不會出現重複的現象。
-
也因為本質其實是HashMap進行處理,所以會有對程式設計而言,資料存放是“無序”而內部實質是“有序”的情況。