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

Java集合中的LinkedHashSet源碼解讀

 更新時間:2023年12月29日 10:32:51   作者:理想萬歲萬萬歲  
這篇文章主要介紹了Java集合中的LinkedHashSet源碼解讀,在LinkedHashMap中,雙向鏈表的遍歷順序通過構造方法指定,如果沒有指定,則使用默認順序為插入順序,即accessOrder=false,需要的朋友可以參考下

一、介紹

前面文章中我們從源碼詳細介紹了繼承于HashMap的LinkedHashMap,并通過圖片示例講解了LinkedHashMap是如何在HashMap的哈希表上將各個節(jié)點通過雙向鏈表串起來的。

也講解了基于HashMap實現的HashSet,那么是否存在類似于LinkedHashMap原理的一種Set集合?答案是肯定的,而且是我們本篇文章要講的LinkedHashSet

顧名思義,LinkedHashSet是基于LinkedHashMap實現的一個Set集合。

另外,本片文章雖然不長,但是對前置知識點有著很強的依賴,需要掌握的前置知識有:HashMap(必選)、紅黑樹(可選)、LinkedHashMap(必選)、HashSet(必選)

二、類的聲明

public class LinkedHashSet<E> extends HashSet<E>
							    implements Set<E>, Cloneable, java.io.Serializable

從類的聲明中可以看到

  • 繼承HashSet,表示LinkedHashSet是對HashSet的擴展。
  • 實現set接口,滿足Set集合的定義
  • 實現了Cloneable接口,提供了對象克隆方法,但請注意,是淺克隆。
  • 實現了Serializable接口,支持序列化。

三、構造方法

前面我們在講HashSet的構造方法時,其中有一個構造方法我們做了特殊對待,如下所示

HashSet(int initialCapacity, float loadFactor, boolean dummy) {
    map = new LinkedHashMap<>(initialCapacity, loadFactor);
}

該構造方法創(chuàng)建的map對象的類型是LinkedHashMap,不同于其他構造方法創(chuàng)建的HashMap對象。

而且我們有個關鍵點不要忽略,在LinkedHashMap中,雙向鏈表的遍歷順序通過構造方法指定,如果沒有指定,則使用默認順序為插入順序,即accessOrder=false。因此,上面的構造方法所創(chuàng)建的LinkedHashMap對象的雙向鏈表遍歷順序為插入順序。

且該構造方法就是為了給其子類LinkedHashSet使用的。我們往下看

無參構造

創(chuàng)建LinkedHashMap實例為內部屬性,并指定底層哈希表的初始容量為16,加載因子為0.75

public LinkedHashSet() {
    super(16, .75f, true);
}

指定初始容量

創(chuàng)建LinkedHashMap實例為內部屬性,并指定底層哈希表的初始容量為initialCapacity,加載因子為0.75

public LinkedHashSet(int initialCapacity) {
    super(initialCapacity, .75f, true);
}

指定初始容量和加載因子

創(chuàng)建LinkedHashMap實例為內部屬性,并指定底層哈希表的初始容量為initialCapacity,加載因子為loadFactor

public LinkedHashSet(int initialCapacity, float loadFactor) {
    super(initialCapacity, loadFactor, true);
}

通過集合構造

雖然說LinkedHashSet的底層是LinkedHashMap,但終究還是哈希表+雙向鏈表,需要對哈希表的容量進行計算以避免頻繁的擴容。

創(chuàng)建LinkedHashMap實例作為內部對象后,通過addAll()方法將集合中的元素逐一保存,addAll()方法作為一個批量保存模版由其父類AbstractCollection提供,其中的add()方法由父類HashSet實現,這是設計模式—模版方法的體現。

public LinkedHashSet(Collection<? extends E> c) {
    super(Math.max(2*c.size(), 11), .75f, true);
    addAll(c);
}
public boolean addAll(Collection<? extends E> c) {
    boolean modified = false;
    for (E e : c)
        if (add(e))
            modified = true;
    return modified;
}

四、最后

看了LinkedHashSet的源碼后,發(fā)現它只提供了以上幾個構造函數,卻沒有提供各個方法。

這是因為它繼承于HashSet,因此HashSet中提供的方法都是可以被LinkedHashSet對象調用的,如add()、remove()、contains()等方法。所以不再過多介紹,

五、結論

  • LinkedHashSet內部維護一個LinkedHashMap對象,其底層數據結構為哈希表+鏈表+紅黑樹+雙向鏈表
  • LinkedHashSet對內部雙向鏈表的遍歷順序為插入順序

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

相關文章

  • Spring Cloud Gateway打造可擴展的微服務網關

    Spring Cloud Gateway打造可擴展的微服務網關

    微服務網關是一個位于客戶端和后端微服務之間的服務器,用于處理所有與客戶端的通信,Spring Cloud Gateway都是一個值得考慮的選擇,它將幫助您更好地管理和保護您的微服務,感興趣的朋友一起看看吧
    2023-11-11
  • Java京東面試題之為什么HashMap線程不安全

    Java京東面試題之為什么HashMap線程不安全

    那天,小二去京東面試,面試官老王一上來就甩給了他一道面試題:為什么 HashMap 是線程不安全的?這個問題哪能難的住小二,這篇文章詳細解答該題目
    2021-11-11
  • java編譯器和JVM的區(qū)別

    java編譯器和JVM的區(qū)別

    在本篇文章里小編給大家整理的是一篇關于java編譯器和JVM的區(qū)別的相關內容,有興趣的朋友們可以學習下。
    2020-12-12
  • 一文講解如何優(yōu)雅的調試jar包

    一文講解如何優(yōu)雅的調試jar包

    在現實開發(fā)過程中,現場環(huán)境永遠比開發(fā)環(huán)境復雜,下面這篇文章主要給大家介紹了關于如何優(yōu)雅的調試jar包的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-03-03
  • 解決mybatis plus 一對多分頁查詢問題

    解決mybatis plus 一對多分頁查詢問題

    這篇文章主要介紹了解決mybatis plus 一對多分頁查詢問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java基礎之動態(tài)代理Cglib詳解

    Java基礎之動態(tài)代理Cglib詳解

    這篇文章主要介紹了Java基礎之動態(tài)代理Cglib詳解,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • SpringBoot如何通過@Profile注解配置多環(huán)境

    SpringBoot如何通過@Profile注解配置多環(huán)境

    在Spring中,可以使用配置文件的方式來指定不同環(huán)境下所需要的配置信息,本文給大家介紹SpringBoot如何通過@Profile注解配置多環(huán)境,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • Java語言實現簡單FTP軟件 FTP上傳下載隊列窗口實現(7)

    Java語言實現簡單FTP軟件 FTP上傳下載隊列窗口實現(7)

    這篇文章主要為大家詳細介紹了Java語言實現簡單FTP軟件,FTP上傳下載隊列窗口的實現方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 一篇文章帶你搞定JAVA注解

    一篇文章帶你搞定JAVA注解

    這篇文章主要介紹了詳解Java注解的實現與使用方法的相關資料,希望通過本文大家能夠理解掌握Java注解的知識,需要的朋友可以參考下
    2021-07-07
  • SpringBoot實現圖片上傳及本地訪問

    SpringBoot實現圖片上傳及本地訪問

    在SpringBoot項目中,處理靜態(tài)文件訪問尤其是實時更新的文件如商品圖片,可通過配置WebMvcConfig將本地文件映射到URL路徑上,以解決重啟項目才能訪問文件的問題,本文詳解如何保存和訪問這些文件,幫助開發(fā)者優(yōu)化項目文件管理
    2022-09-09

最新評論