Java Set集合详解及Set与List的区别
Set是什么?
? ? Java中的Set集合是繼承Collection的接口,是一個不包含重復元素的集合。
? ? 下圖是Set集合的源碼。
Set和List都是以接口的形式來進行聲明。Set主要包含三種存放數據類型都變量,分別是HashSet,LinkedHashSet,TreeSet.
HashSet LinkedHashSet TreeSet的主要使用情境
????? ? HashSet,從名稱就可以看出肯定是和Hash這樣的數據結構有關,打開HashSet源碼可以看到一個很熟悉到對象
對 就是它HashMap, 熟不熟悉,意不意外,你以為和List同在一個Collection下,他們就很不同么,而且HashSet如果在第一次調用的時候就是new HashMap();
?
public HashSet(int initialCapacity, float loadFactor) {map = new HashMap<>(initialCapacity, loadFactor); } ? public HashSet(Collection<? extends E> c) {map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));addAll(c); }?
public HashSet(int initialCapacity) {map = new HashMap<>(initialCapacity); } HashSet(int initialCapacity, float loadFactor, boolean dummy) {map = new LinkedHashMap<>(initialCapacity, loadFactor); }以上是HashSet,1.9版本的的構造器,可見HashSet的底層就是HashMap來構建的并可以添加初始容量和加載因子,來調節反應時間或是空間容量.
?
public boolean add(E e) {//hashset添加元素,即向hashmap下put元素,這也是為什么hashset不會出現重復的元素return map.put(e, PRESENT)==null; }LinkedHashSet? ??
????? ? 當看到源碼的時候同時是大吃一斤了吧,沒想到,萬萬沒想到竟然不是鏈表加hash加什么集合,而是:LinkedHashMap。
? ? ? ? ?也就是說這完完全全就是LinkedHashMap的數據結構,并且符合其所有屬性和性質,有序,不可重復。
接下來再看看 TreeSet:
????
從這里也可以看出TreeSet同樣也是以TreeMap作為存儲結構,有序,不可重復。
?實際上,可以看出,set的實體類主要就是以map為基礎,相對應的使用環境和意義也和對應的map相同。
? ? 那為什么會構造Set這個集合呢?
? ? 實際上就是利用map的key-value鍵值對的方式,通過key的唯一的特性,主要將set構建的對象放入key中,以這樣的方式來使用集合的遍歷一些特性,從而可以直接用Set來進行調用。
總結
以上是生活随笔為你收集整理的Java Set集合详解及Set与List的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mapper.xml报异常The con
- 下一篇: Error Code: 1052. C