前言:學習Set之前,如果你對List沒有充分的瞭解,那就先學一波List吧!
從List我們知道它是Collection的子接口,也就是對List做了進一步的封裝,那他也有了自己的特點。有序的集合List,元素可以重複。可以有null。
那麼Set呢?
讓我們開一波Set車吧!
Set接口
簡單介紹:Set接口是Collection的接口,是無序的Set集合且集合內元素不能重複。常用的Set實現類:
HashSet、LinkedHashSet、TreeSet
1.HashSet:
- 特點:基於HashMap進行存儲。遍歷時不保證順序,並且不保證下次遍歷的順序和之前一樣。HashSet允許null元素。
- 與HashMap比:HashSet的集合就是HashMap的Key的集合,然後HashMap的val默認都是PRESENT。HashMap的定義即是key不重複的集合。使用HashMap實現,這樣HashSet就不需要再實現一遍。所以所有的add,remove等操作其實就是HashMap的add、remove操作,遍歷操作其實就是HashMap的keySet的操作。
2.LinkedHashSet:
- 特點:LinkedHashSet相對於HashSet來說就是一個可以保持順序的Set集合。HashSet是無序的,LinkedHashSet會根據add、remove這些操作的順序在遍歷時返回固定的集合順序。這些順序不是元素大小的順序,而是可以保持2次遍歷的順序是一樣的。
- 與LinkedHashMap比:LinkedHashSet的數據結構是基於LinkedHashMap。類似HashSet基於HashMap的源碼實現。
3.TreeSet:
- 特點:TreeSet即是一組有次序的集合,如果沒有指定排序規則Comparator,則按照自然排序。(自然排序即e1.compareTo(e2) == 0作爲比較)
- 注意:TreeSet內元素必須Comparable接口。
- 與TreeMap比:TreeSet源碼的算法即基於TreeMap。
Set實現 使用場景 數據結構
HashSet 無序的、無重複的數據集合 基於HashMap
LinkedSet 維護次序的HashSet 基於LinkedHashMap
TreeSet 保持元素大小次序的集合,元素需要實現Comparable接口 基於TreeMap