日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2025/3/18 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

?? ? ? ?這幾天看了下容器的源碼,總結(jié)一下HashSet vs TreeSet vs LinkedHashSet的區(qū)別, 如下圖,collection的繼承實(shí)現(xiàn)分支,這里先只講解set分支

1、HashSet vs TreeSet vs LinkedHashSet三者的數(shù)據(jù)結(jié)構(gòu)分析

?????(1)HashSet:由哈希表(實(shí)際上是一個(gè)HashMap實(shí)例)支持。它不保證set?的迭代順序;特別是它不保證該順序恒久不變。此類允許使用null元素。對(duì)于HashSet中保存的對(duì)象,請(qǐng)注意正確重寫其equals和hashCode方法,以保證放入的對(duì)象的唯一性。

?????注意:hashSet是利用HashMap的key進(jìn)行數(shù)據(jù)存儲(chǔ)。同時(shí)HashMap的key具有唯一性

?????參考:http://www.cnblogs.com/ITtangtang/p/3948538.html

? ? (2) TreeSet:TreeSet實(shí)際上是TreeMap實(shí)現(xiàn)的。當(dāng)我們構(gòu)造TreeSet時(shí);若使用不帶參數(shù)的構(gòu)造函數(shù),則TreeSet的使用自然比較器;若用戶需要使用自定義的比較器,則需要使用帶比較器的參數(shù)。

? ? ? 參考:http://www.cnblogs.com/skywang12345/p/3311268.html

?????(3) LinkedHashSet:?LinkedHashSet也是一個(gè)集合,與HashSet不同的是,LinkedHashSet是有序的,由于其繼承了HashSet,所以構(gòu)造方法中調(diào)用的是HashSet的構(gòu)造方法,在HashSet的構(gòu)造方法中有一個(gè)專門為LinkedHashSet重寫的構(gòu)造方法。并且其內(nèi)部利用LinkedHashMap實(shí)現(xiàn)的。

????? 參考:http://blog.csdn.net/wxl1234579/article/details/54971525

?

總結(jié):

????????使用Set集合的主要原因是因?yàn)镾et集合里面沒有重復(fù)的元素。Set集合有三個(gè)常見的實(shí)現(xiàn)類:HashSet,TreeSet,LinkedHashSet。什么時(shí)候,選擇哪一個(gè)使用非常重要。簡(jiǎn)單的說,如果你關(guān)注性能,應(yīng)該使用HashSet;如果你需要一個(gè)有序的Set集合,應(yīng)該使用TreeSet;如果你需要一個(gè)Set集合保存了原始的元素插入順序,應(yīng)該使用LinkedHashSet。

????????? ?注意:如果要詳細(xì)研究set的原理,請(qǐng)去查看相對(duì)應(yīng)的map實(shí)現(xiàn)

?

轉(zhuǎn)載于:https://my.oschina.net/jiahaov/blog/1552616

總結(jié)

以上是生活随笔為你收集整理的Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。