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(插入、刪除、修改性能慢)