日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet

發布時間:2025/3/18 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。