Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet
2019獨角獸企業重金招聘Python工程師標準>>>
?? ? ? ?這幾天看了下容器的源碼,總結一下HashSet vs TreeSet vs LinkedHashSet的區別, 如下圖,collection的繼承實現分支,這里先只講解set分支
1、HashSet vs TreeSet vs LinkedHashSet三者的數據結構分析
?????(1)HashSet:由哈希表(實際上是一個HashMap實例)支持。它不保證set?的迭代順序;特別是它不保證該順序恒久不變。此類允許使用null元素。對于HashSet中保存的對象,請注意正確重寫其equals和hashCode方法,以保證放入的對象的唯一性。
?????注意:hashSet是利用HashMap的key進行數據存儲。同時HashMap的key具有唯一性
?????參考:http://www.cnblogs.com/ITtangtang/p/3948538.html
? ? (2) TreeSet:TreeSet實際上是TreeMap實現的。當我們構造TreeSet時;若使用不帶參數的構造函數,則TreeSet的使用自然比較器;若用戶需要使用自定義的比較器,則需要使用帶比較器的參數。
? ? ? 參考:http://www.cnblogs.com/skywang12345/p/3311268.html
?????(3) LinkedHashSet:?LinkedHashSet也是一個集合,與HashSet不同的是,LinkedHashSet是有序的,由于其繼承了HashSet,所以構造方法中調用的是HashSet的構造方法,在HashSet的構造方法中有一個專門為LinkedHashSet重寫的構造方法。并且其內部利用LinkedHashMap實現的。
????? 參考:http://blog.csdn.net/wxl1234579/article/details/54971525
?
總結:
????????使用Set集合的主要原因是因為Set集合里面沒有重復的元素。Set集合有三個常見的實現類:HashSet,TreeSet,LinkedHashSet。什么時候,選擇哪一個使用非常重要。簡單的說,如果你關注性能,應該使用HashSet;如果你需要一個有序的Set集合,應該使用TreeSet;如果你需要一個Set集合保存了原始的元素插入順序,應該使用LinkedHashSet。
????????? ?注意:如果要詳細研究set的原理,請去查看相對應的map實現
?
轉載于:https://my.oschina.net/jiahaov/blog/1552616
總結
以上是生活随笔為你收集整理的Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (10)变量提升
- 下一篇: 项目管理纵横谈(1)──项目的管理的目标