欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java集合中的Set之LinkedHashSet詳解

 更新時(shí)間:2023年09月04日 09:03:35   作者:X-TIE  
這篇文章主要介紹了Java集合中的Set之LinkedHashSet詳解,LinkedHashSet是Set集合的一個(gè)實(shí)現(xiàn),具有set集合不重復(fù)的特點(diǎn),同時(shí)具有可預(yù)測(cè)的迭代順序,也就是我們插入的順序,并且linkedHashSet是一個(gè)非線程安全的集合,需要的朋友可以參考下

Set中的LinkedHashSet

LinkedHashSet是Set集合的一個(gè)實(shí)現(xiàn),具有set集合不重復(fù)的特點(diǎn),同時(shí)具有可預(yù)測(cè)的迭代順序,也就是我們插入的順序。

并且linkedHashSet是一個(gè)非線程安全的集合。

如果有多個(gè)線程同時(shí)訪問(wèn)當(dāng)前l(fā)inkedhashset集合容器,并且有一個(gè)線程對(duì)當(dāng)前容器中的元素做了修改,那么必須要在外部實(shí)現(xiàn)同步保證數(shù)據(jù)的冥等性。

下面我們new一個(gè)新的LinkedHashSet容器看一下具體的源碼實(shí)現(xiàn)。

并分析師如何保證數(shù)據(jù)的插入順序:

Set<String> set = new LinkedHashSet<>();

跟進(jìn)LinkedHashSet可以得到super一個(gè)父類初始化為一個(gè)容器為16大小,加載因子為0.75的Map容器。

構(gòu)造一個(gè)空連接散列集合

實(shí)際創(chuàng)建的是一個(gè)LinkedHashMap帶有制定大小和加載因子的容器。

在前面講過(guò)一次,map的容器的大小必須是2的冥,那么在講一次如何保證必須是2的冥,通過(guò)我們傳入的參數(shù)在構(gòu)建map集合的是通過(guò)位運(yùn)算實(shí)現(xiàn):

其中initialCapacity為我們傳入的具體按容器的大小。

上面是我們描述的LinkedHashSet的具體構(gòu)建過(guò)程,以及構(gòu)建的具體內(nèi)容。

由于LinkedHashSet是一個(gè)哈希表和鏈表的結(jié)合,且是一個(gè)雙向鏈表,那么我們來(lái)看一下什么是雙向連邊?

雙向鏈表是鏈表的一種,他的每個(gè)數(shù)據(jù)節(jié)點(diǎn)都有兩個(gè)指針?lè)謩e指向直接后繼和直接前驅(qū),所以從雙向鏈表的任意一個(gè)節(jié)點(diǎn)開(kāi)始都可以很方便的訪問(wèn)它的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)。

這是雙向鏈表的優(yōu)點(diǎn),那么有優(yōu)點(diǎn)就有缺點(diǎn),缺點(diǎn)是每個(gè)節(jié)點(diǎn)都需要保存當(dāng)前節(jié)點(diǎn)的next和prev兩個(gè)屬性,這樣才能保證優(yōu)點(diǎn)。

所以需要更多的內(nèi)存開(kāi)銷,并且刪除和添加也會(huì)比較費(fèi)時(shí)間。

下面我們圖示一個(gè)雙向兩表的節(jié)點(diǎn):

多個(gè)節(jié)點(diǎn)相互連接,保證了數(shù)據(jù)錄入的順序。

源碼分析

那么我們?cè)创a分析一下具體的錄入詳情:

我們定義一個(gè)LinkedHashSet

LinkedHashSet<String> set = new LinkedHashSet<>();

然后set.add();跟一下這個(gè)add是走的那個(gè)方法:

跟進(jìn)來(lái)走的是put的方法:LinkedHashSet.class下的,這個(gè)是重寫了超類中put的具體add方法。

他會(huì)在新分配的元素在鏈表的末尾插入一條。

進(jìn)來(lái)走的還是HashMap的put添加方法,在上面的判斷和計(jì)算hash確定位置之后,由于LinkedHashSet重寫了addEntry

在元素的后面添加新的元素。

整個(gè)過(guò)程就是LinkedHashSet在容器插入數(shù)據(jù)的過(guò)程。

此過(guò)程主要由LinkedHashSet.class中重寫超類的兩個(gè)addEntry和createEntry 實(shí)現(xiàn)雙向鏈表的結(jié)構(gòu)。

保證數(shù)據(jù)已我們錄入的順序遍歷輸出。

到此這篇關(guān)于Java集合中的Set之LinkedHashSet詳解的文章就介紹到這了,更多相關(guān)Java中的LinkedHashSet內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springCloud集成nacos啟動(dòng)時(shí)報(bào)錯(cuò)原因排查

    springCloud集成nacos啟動(dòng)時(shí)報(bào)錯(cuò)原因排查

    這篇文章主要介紹了springCloud集成nacos啟動(dòng)時(shí)報(bào)錯(cuò)原因排查,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Mybatis的特點(diǎn)及優(yōu)點(diǎn)

    Mybatis的特點(diǎn)及優(yōu)點(diǎn)

    Mybatis 本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis。mybatis有哪些特點(diǎn)和優(yōu)點(diǎn)呢?通過(guò)本文一起學(xué)習(xí)吧
    2016-12-12
  • Java并發(fā)編程-volatile可見(jiàn)性詳解

    Java并發(fā)編程-volatile可見(jiàn)性詳解

    這篇文章主要介紹了Java并發(fā)編程-volatile可見(jiàn)性詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SpringBoot下載文件的實(shí)現(xiàn)及速度對(duì)比

    SpringBoot下載文件的實(shí)現(xiàn)及速度對(duì)比

    這篇文章主要介紹了SpringBoot下載文件的實(shí)現(xiàn)及速度對(duì)比,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 使用Feign調(diào)用第三方http接口

    使用Feign調(diào)用第三方http接口

    這篇文章主要介紹了使用Feign調(diào)用第三方http接口,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java連接Oracle數(shù)據(jù)庫(kù)的方法解析

    java連接Oracle數(shù)據(jù)庫(kù)的方法解析

    本文主要對(duì)java連接Oracle數(shù)據(jù)庫(kù)方法進(jìn)行步驟解析,具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • gson ajax 數(shù)字精度丟失問(wèn)題的解決方法

    gson ajax 數(shù)字精度丟失問(wèn)題的解決方法

    下面小編就為大家?guī)?lái)一篇gson ajax 數(shù)字精度丟失問(wèn)題的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Dubbo+zookeeper搭配分布式服務(wù)的過(guò)程詳解

    Dubbo+zookeeper搭配分布式服務(wù)的過(guò)程詳解

    Dubbo作為分布式架構(gòu)比較后的框架,同時(shí)也是比較容易入手的框架,適合作為分布式的入手框架,下面是簡(jiǎn)單的搭建過(guò)程,對(duì)Dubbo+zookeeper分布式服務(wù)搭建過(guò)程感興趣的朋友一起看看吧
    2022-04-04
  • Spring?AOP底層機(jī)制之代理模式

    Spring?AOP底層機(jī)制之代理模式

    如何實(shí)現(xiàn)在不修改源碼的基礎(chǔ)上實(shí)現(xiàn)代碼功能的增強(qiáng)呢?spring為我們提供了代理模式。所謂的代理模式通俗來(lái)說(shuō)就是一個(gè)中介,它給某一個(gè)對(duì)象提供一個(gè)代理對(duì)象,并由代理對(duì)象控制原對(duì)象的引用,從而實(shí)現(xiàn)在不修改源碼的基礎(chǔ)上實(shí)現(xiàn)代碼功能的增強(qiáng)
    2022-08-08
  • JAVA中的FileWriter流解析

    JAVA中的FileWriter流解析

    這篇文章主要介紹了JAVA中的FileWriter流解析,FileWriter類提供了多種寫入字符的方法,包括寫入單個(gè)字符、寫入字符數(shù)組和寫入字符串等,它還提供了一些其他的方法,如刷新緩沖區(qū)、關(guān)閉文件等,需要的朋友可以參考下
    2023-10-10

最新評(píng)論