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

淺談Java中的LinkedHashSet哈希鏈表

 更新時間:2023年09月04日 08:44:51   作者:橙子  
這篇文章主要介紹了淺談Java中的LinkedHashSet哈希鏈表,LinkedHashSet 是 Java 中的一個集合類,它是 HashSet 的子類,并實現(xiàn)了 Set 接口,與 HashSet 不同的是,LinkedHashSet 保留了元素插入的順序,并且具有 HashSet 的快速查找特性,需要的朋友可以參考下

HashSet哈希鏈表

Map、Set集合存放是無序的,然而LinkedHashSet和LinkedHashMap等集合卻有序

原因:LinkedHashSet與LinkedHashMap底層是通過雙向鏈表來實現(xiàn)排序的。

雙向鏈表里面的數(shù)據(jù)在邏輯上的存儲是連續(xù)的,連續(xù)自然也就有順序。

有序的原因關(guān)鍵在LinkedHashMap的Node 節(jié)點上。

LinkedHashMap 繼承自HashMap 并且實現(xiàn)了Map接口。

源碼如下:

/**
HashMap.Node subclass for normal LinkedHashMap entries.
*/
static class Entry<K,V> extends HashMap.Node<K,V> {
    Entry<K,V> before, after;
    Entry(int hash, K key, V value, Node<K,V> next) {
        super(hash, key, value, next);
    }
}

可以看到LinkedHashMap.Entry 繼承自HashMap.Node 除了Node 本身有的幾個屬性外,額外增加了before after 用于指向前一個Entry 后一個Entry。

也就是說,元素之間維持著一條總的鏈表數(shù)據(jù)結(jié)構(gòu)。正式因為這個鏈表才保證了LinkedHashMap的有序性。

LinkedHashSet集合也是根據(jù)元素hashCode值來決定元素存儲位置,但它同時使用鏈表維護元素的次序,這樣使得元素看起來是以插入的順序保存的。

也就是說,當遍歷LinkedHashSet集合里元素時,HashSet將會按元素的添加順序來訪問集合里的元素,因此LinkedHashSet可以保證元素按插入順序輸出。

而Set對每個對象只接受一次,里面的值不允許重復(fù),是無序的數(shù)據(jù)結(jié)構(gòu);

LinkeHashSet是set集合的一個實現(xiàn),具有set集合不重復(fù)的特點,同時具有可預(yù)測的迭代順序,即輸入順序。

這種雙鏈表的結(jié)構(gòu)一條用于儲存元素,一條用于記錄順序。

而Map Set集合內(nèi)是單鏈表或稀疏數(shù)組,各元素之間并沒有維持一條總的鏈表結(jié)構(gòu),所以Map和Set是無序的

LinkedHashSet的4種構(gòu)造函數(shù):

  1. 第一種構(gòu)造函數(shù)初始化一個空的LinkedHashSet: LinkedHashSet( );
  2. 第二種構(gòu)造函數(shù)使用Collection元素集初始化LinkedHashSet: LinkedHashSet(Collection c);
  3. 第三種構(gòu)造函數(shù)用給定的容量初始化LinkedHashSet: LinkedHashSet(int capacity);
  4. 第四種構(gòu)造函數(shù)通過傳入的容量和填充比初始化LinkedHashSet: LinkedHashSet(int capacity, float fillRatio);

在這里插入圖片描述

運行結(jié)果:

在這里插入圖片描述

這兩斷代碼我們可以得出:LinkedHashSet 底層采用雙向鏈表實現(xiàn),可以保證元素的插入順序,又因為是HashSet的子類,所以插入的元素不能重復(fù)。

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

相關(guān)文章

  • JVM內(nèi)存結(jié)構(gòu)相關(guān)知識解析

    JVM內(nèi)存結(jié)構(gòu)相關(guān)知識解析

    這篇文章主要介紹了JVM內(nèi)存結(jié)構(gòu)相關(guān)知識解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 淺談一下Java中的悲觀鎖和樂觀鎖

    淺談一下Java中的悲觀鎖和樂觀鎖

    這篇文章主要介紹了一下Java中的悲觀鎖和樂觀鎖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Spring復(fù)雜對象創(chuàng)建的方式小結(jié)

    Spring復(fù)雜對象創(chuàng)建的方式小結(jié)

    這篇文章主要介紹了Spring復(fù)雜對象創(chuàng)建的三種方式,現(xiàn)在使用Spring如何創(chuàng)建這種類型的對象?Spring中提供了三種方法來創(chuàng)建復(fù)雜對象,需要的朋友可以參考下
    2022-01-01
  • SpringBoot項目中使用Swagger2及注解解釋的詳細教程

    SpringBoot項目中使用Swagger2及注解解釋的詳細教程

    Swagger2是一個開源項目,用于為RESTful Web服務(wù)生成REST API文檔,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項目中使用Swagger2及注解解釋的詳細教程,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • Java適配器模式之如何靈活應(yīng)對不匹配的接口

    Java適配器模式之如何靈活應(yīng)對不匹配的接口

    本文介紹了Java中的適配器模式,包括對象適配器模式和接口適配器模式,適配器模式通過將一個類的接口轉(zhuǎn)換成客戶期望的另一個接口,解決了不同接口之間的不兼容問題,它提高了系統(tǒng)的靈活性、復(fù)用性和解耦性,需要的朋友可以參考下
    2024-10-10
  • 從零搭建Spring Boot腳手架整合OSS作為文件服務(wù)器的詳細教程

    從零搭建Spring Boot腳手架整合OSS作為文件服務(wù)器的詳細教程

    這篇文章主要介紹了從零搭建Spring Boot腳手架整合OSS作為文件服務(wù)器的詳細教程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java多線程CyclicBarrier的實現(xiàn)代碼

    Java多線程CyclicBarrier的實現(xiàn)代碼

    CyclicBarrier可以使一定數(shù)量的線程反復(fù)地在柵欄位置處匯集,本文通過實例代碼介紹下Java多線程CyclicBarrier的相關(guān)知識,感興趣的朋友一起看看吧
    2022-02-02
  • Spring中的ClassPathXmlApplicationContext源碼詳解

    Spring中的ClassPathXmlApplicationContext源碼詳解

    這篇文章主要介紹了Spring中的ClassPathXmlApplicationContext源碼詳解,ApplicationContext的主要實現(xiàn)類是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默認從類路徑加載配置文件,后者默認從文件系統(tǒng)中裝載配置文件,需要的朋友可以參考下
    2023-12-12
  • 快速入手IntelliJ IDEA基本配置

    快速入手IntelliJ IDEA基本配置

    IntelliJ IDEA是java編程語言開發(fā)的集成環(huán)境,本篇主要介紹了對它的安裝、配置maven倉庫、調(diào)試方法、常用的插件推薦、快捷鍵大全與常用快捷鍵說明,感興趣的朋友一起看看吧
    2021-10-10
  • HashMap 和 HashSet的區(qū)別

    HashMap 和 HashSet的區(qū)別

    本文主要介紹HashMap 和 HashSet的區(qū)別,這里整理了詳細的資料來說名兩者的區(qū)別,并說明如何使用該方法,有需要的小伙伴可以參考下
    2016-09-09

最新評論