1. 程式人生 > 實用技巧 >Collection集合-05.HashSet

Collection集合-05.HashSet

在集合使用中,我們經常會用到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進行處理,所以會有對程式設計而言,資料存放是“無序”而內部實質是“有序”的情況。