最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java集合中的Set之LinkedHashSet詳解

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

Set中的LinkedHashSet

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

并且linkedHashSet是一個非線程安全的集合。

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

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

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

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

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

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

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

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

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

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

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

雙向鏈表是鏈表的一種,他的每個數(shù)據(jù)節(jié)點都有兩個指針分別指向直接后繼和直接前驅(qū),所以從雙向鏈表的任意一個節(jié)點開始都可以很方便的訪問它的前驅(qū)節(jié)點和后繼節(jié)點。

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

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

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

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

源碼分析

那么我們源碼分析一下具體的錄入詳情:

我們定義一個LinkedHashSet

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

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

跟進來走的是put的方法:LinkedHashSet.class下的,這個是重寫了超類中put的具體add方法。

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

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

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

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

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

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

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

相關(guān)文章

  • Java基于drools做規(guī)則校驗的實現(xiàn)

    Java基于drools做規(guī)則校驗的實現(xiàn)

    工作中需要開發(fā)一個規(guī)則服務(wù),提供各種規(guī)則,本文主要介紹了Java基于drools做規(guī)則校驗的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 使用idea的database模塊繪制數(shù)據(jù)庫er圖的方法

    使用idea的database模塊繪制數(shù)據(jù)庫er圖的方法

    這篇文章主要介紹了使用idea的database模塊繪制數(shù)據(jù)庫er圖,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • IDEA maven父工程pom.xml使用及說明

    IDEA maven父工程pom.xml使用及說明

    MavenPOM是Maven工程的基本工作單元,父工程的pom文件中使用<packaging>pom</packaging>表示使用maven分模塊管理,父級項目通常使用pom作為packaging,并通過<properties>和<dependencyManagement>統(tǒng)一管理項目的版本號和依賴
    2026-01-01
  • java中復(fù)雜查詢sql語句該怎么寫

    java中復(fù)雜查詢sql語句該怎么寫

    我們知道在java連接數(shù)據(jù)庫之后,需要數(shù)據(jù)庫的sql語句,下面這篇文章主要給大家介紹了關(guān)于java中復(fù)雜查詢sql語句該怎么寫的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • MyBatis Plus like參數(shù)為百分號%查詢結(jié)果異常原因分析及解決

    MyBatis Plus like參數(shù)為百分號%查詢結(jié)果異常原因分析及解決

    文章指出在MyBatisPlus使用LIKE查詢時,用戶輸入的%可能導(dǎo)致通配符誤匹配,推薦使用ESCAPE轉(zhuǎn)義功能,將%轉(zhuǎn)換為普通字符,既支持模糊查詢又避免全表匹配,提升準確性和性能
    2025-09-09
  • spring boot ${}占位符不起作用的解決方案

    spring boot ${}占位符不起作用的解決方案

    這篇文章主要介紹了spring boot ${}占位符不起作用的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java中該如何優(yōu)雅的使用線程池詳解

    Java中該如何優(yōu)雅的使用線程池詳解

    在java開發(fā)中我們對“池”的概念并不陌生,常見的有數(shù)據(jù)庫連接池、線程池、對象池、常量池等等,其作用基本上就是避免頻繁的創(chuàng)建和回收,造成資源浪費,線程池也不例外,這篇文章主要給大家介紹了關(guān)于Java中該如何優(yōu)雅的使用線程池的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • Java?GenericObjectPool?對象池化技術(shù)之SpringBoot?sftp?連接池工具類詳解

    Java?GenericObjectPool?對象池化技術(shù)之SpringBoot?sftp?連接池工具類詳解

    這篇文章主要介紹了Java?GenericObjectPool?對象池化技術(shù)之SpringBoot?sftp?連接池工具類詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • Hibernate框架中的緩存技術(shù)詳解

    Hibernate框架中的緩存技術(shù)詳解

    這篇文章主要介紹了Hibernate框架中的緩存技術(shù),結(jié)合實例形式詳細分析了Hibernate框架緩存機制的原理與具體使用技巧,需要的朋友可以參考下
    2016-03-03
  • java中addMouseListener()方法的使用

    java中addMouseListener()方法的使用

    這篇文章主要介紹了java中addMouseListener()方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

昆山市| 万州区| 德化县| 岳阳市| 衡阳县| 高尔夫| 简阳市| 泗水县| 扎兰屯市| 临泽县| 淮南市| 五指山市| 长垣县| 永昌县| 阳城县| 宜丰县| 肥西县| 祁门县| 资溪县| 胶南市| 九龙坡区| 昌黎县| 凌源市| 玉树县| 大名县| 康马县| 冕宁县| 临邑县| 彭水| 东乡族自治县| 泌阳县| 德清县| 滦平县| 尼勒克县| 独山县| 保靖县| 葫芦岛市| 安康市| 苏州市| 盈江县| 万荣县|