国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

3分鐘搞掂Set集合

widuu / 695人閱讀

摘要:下面總結(jié)一下集合常用的三個子類吧無序,允許為,底層是散列表紅黑樹,非線程同步有序,不允許為,底層是紅黑樹非線程同步迭代有序,允許為,底層是雙向鏈表,非線程同步從結(jié)論而言我們就可以根據(jù)自己的實(shí)際情況來使用了。

前言
聲明,本文用的是jdk1.8

前面章節(jié)回顧:

Collection總覽

List集合就這么簡單【源碼剖析】

Map集合、散列表、紅黑樹介紹

HashMap就是這么簡單【源碼剖析】

LinkedHashMap就這么簡單【源碼剖析】

TreeMap就這么簡單【源碼剖析】

ConcurrentHashMap基于JDK1.8源碼剖析

現(xiàn)在這篇主要講Set集合的三個子類:

HashSet集合

A:底層數(shù)據(jù)結(jié)構(gòu)是哈希表(是一個元素為鏈表的數(shù)組) + 紅黑樹

TreeSet集合

A:底層數(shù)據(jù)結(jié)構(gòu)是紅黑樹(是一個自平衡的二叉樹)

B:保證元素的排序方式

LinkedHashSet集合

A::底層數(shù)據(jù)結(jié)構(gòu)由哈希表(是一個元素為鏈表的數(shù)組)和雙向鏈表組成。

這篇主要來看看它們比較重要的方法是如何實(shí)現(xiàn)的,需要注意些什么,最后比較一下哪個時候用哪個~

強(qiáng)調(diào):在學(xué)習(xí)本文之前,最好是看過Map系列的文章

看這篇文章之前最好是有點(diǎn)數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ):

Java實(shí)現(xiàn)單向鏈表

棧和隊(duì)列就是這么簡單

二叉樹就這么簡單

當(dāng)然了,如果講得有錯的地方還請大家多多包涵并不吝在評論去指正~

一、HashSet剖析

首先,我們來看一下HashSet的繼承結(jié)構(gòu)圖:

按照慣例,我們來看看HashSet頂部注釋:

從頂部注釋來看,我們就可以歸納HashSet的要點(diǎn)了:

實(shí)現(xiàn)Set接口

不保證迭代順序

允許元素為null

底層實(shí)際上是一個HashMap實(shí)例

非同步

初始容量非常影響迭代性能

我本來也是想在寫完List集合就轉(zhuǎn)到Set集合的了,可是:看到底層實(shí)際上是一個HashMap實(shí)例時,我就去學(xué)習(xí)Map集合先了~

頂部注釋說底層實(shí)際上是一個HashMap實(shí)例,那證據(jù)呢?

我們再來看一下HashSet整個類的方法和屬性:

對于學(xué)習(xí)過HashMap的人來說,簡直簡單得讓人開心,哈哈哈~

我們知道Map是一個映射,有key有value,既然HashSet底層用的是HashMap,那么value在哪里呢???

value是一個Object,所有的value都是它

所以可以直接總結(jié)出:HashSet實(shí)際上就是封裝了HashMap,操作HashSet元素實(shí)際上就是操作HashMap。這也是面向?qū)ο蟮囊环N體現(xiàn),重用性賊高

建議:先去閱讀HashMap就是這么簡單【源碼剖析】

二、TreeSet剖析

首先,我們也來看看TreeSet的類繼承結(jié)構(gòu)圖:

按照慣例,我們來看看TreeSet頂部注釋:

從頂部注釋來看,我們就可以歸納TreeSet的要點(diǎn)了:

實(shí)現(xiàn)NavigableSet接口

可以實(shí)現(xiàn)排序功能

底層實(shí)際上是一個TreeMap實(shí)例

非同步

三、LinkedHashSet剖析

首先,我們也來看看TreeSet的類繼承結(jié)構(gòu)圖:

按照慣例,我們來看看LinkedHashSet頂部注釋:

從頂部注釋來看,我們就可以歸納LinkedHashSet的要點(diǎn)了:

迭代是有序的

允許為null

底層實(shí)際上是一個HashMap+雙向鏈表實(shí)例(其實(shí)就是LinkedHashMap)...

非同步

性能比HashSet差一丟丟,因?yàn)橐S護(hù)一個雙向鏈表

初始容量與迭代無關(guān),LinkedHashSet迭代的是雙向鏈表

四、總結(jié)

可以很明顯地看到,Set集合的底層就是Map,所以我都沒有做太多的分析在上面,也沒什么好分析的了。

下面總結(jié)一下Set集合常用的三個子類吧:

HashSet:

無序,允許為null,底層是HashMap(散列表+紅黑樹),非線程同步

TreeSet:

有序,不允許為null,底層是TreeMap(紅黑樹),非線程同步

LinkedHashSet:

迭代有序,允許為null,底層是HashMap+雙向鏈表,非線程同步

從結(jié)論而言我們就可以根據(jù)自己的實(shí)際情況來使用了。

參考資料:

https://zhuanlan.zhihu.com/p/29021276

https://blog.csdn.net/panweiwei1994/article/details/76555359

如果文章有錯的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號:Java3y。為了大家方便,剛新建了一下qq群:742919422,大家也可以去交流交流。謝謝支持了!希望能多介紹給其他有需要的朋友

文章的目錄導(dǎo)航:https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang

目前初步打算寫多線程,你們覺得怎么樣呢?可以在評論區(qū)留言~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69071.html

相關(guān)文章

  • Java 中實(shí)現(xiàn)集合的 keep in order

    摘要:此項(xiàng)禁止的一個特殊情況是不允許某個包含其自身作為元素。即使的順序與不一致,其行為也是定義良好的它只是違背了接口的常規(guī)協(xié)定。 原問題 Java 中怎樣實(shí)現(xiàn)一種即使元素改變依然有序的集合? 問題由來 起因是在公司做游戲項(xiàng)目的時候遇到一個需求需要實(shí)現(xiàn): 服務(wù)器要維護(hù)一個幫派成員(Member)的集合,這個集合要按照在線狀態(tài)、成員等級和名稱依次有序排列。 由于每時每刻都有玩家在不斷上下線,成員...

    gyl_coder 評論0 收藏0
  • 學(xué)會這15點(diǎn),讓你分分鐘拿下 Redis 數(shù)據(jù)庫

    摘要:它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹悼梢允亲址A斜砑虾陀行蚣系阮愋汀1硎緝?nèi)核允許分配所有的物理內(nèi)存,而不管當(dāng)前的內(nèi)存狀態(tài)如何。管理方便,后續(xù)可自行增加或摘除節(jié)點(diǎn),移動分槽等等。 本文已獲得原作者霸都民工哥授權(quán)。 1、Redis 簡介 REmote DIctionary Server(Redis) ?是一個由 Salvatore Sanfilippo寫的 key-value 存儲...

    zhangke3016 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<