Java集合之Set

什麼是Set數據結構

  • Set相對於List是簡單的一種集合,具有和Collection完全一樣的介面,只是實現介面不同,Set不保存重複的元素,存儲一組唯一,無序的對象
  • Set中的元素是不重複的,實現細節可以看Map,因為這些Set的實現都是對應的Map的一種封裝。比如HashSet是對HashMap的封裝,TreeSet對應TreeMap
  • Set底層是一個HashMap,由於HashMap的put()方法是一個鍵值對,當新放入HashMap的Entry中key與集合原有Entry的key相同(hashCode()返回值相同,通過equals比較也返回true),新添加的Entry的value會將覆蓋原來Entry的value,但key不會有任何改變
  • 允許包含值為null的元素,但最多只能有一個null元素

常見的實現類

  • HashSet
    • HashSet類按照哈希演算法來存取集合中的對象,存取速度比較快
    • 對應的Map是hashMap,是基於Hash的快速元素插入,元素無順序
  • TreeSet
    • TreeSet類實現了SortedSet介面,能夠對集合中的對象進行排序
//創建對象,HashSet和TreeSet api⼀樣
Set<Integer> set = new HashSet<>();
//往容器⾥⾯添加對象
set.add("jack");
//清空元素
set.clear();
//返回⼤⼩
set.size();
//根據對象刪除元素
set.remove("jack");
//是否為空
set.isEmpty();

兩則區別

  • HashSet不能保證元素的排列順序,TreeSet是SortedSet介面的唯一實現類,可以確保集合元素處於排序狀態
  • HashSet底層用的是哈希表,TreeSet採用的數據結構是紅黑樹(紅黑樹是一種特定類型的二叉樹)
  • HashSet中元素可以是Null,但只能有一個,TreeSet不允許放入Null
  • 一般使用HashSet,如果需要排序的功能時,才使用TreeSet(插入、刪除、修改性能慢)

 

Tags: