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

深入理解LinkedHashSet集合的底層機制

 更新時間:2023年10月30日 08:30:45   作者:荊軻刺秦  
這篇文章主要介紹了LinkedHashSet的底層機制詳解,LinkedHashSet根據(jù)元素的hashCode值來決定元素的存儲位置,同時使用鏈表維護元素的次序,?這使得元素看起來是以插入順序保存的,需要的朋友可以參考下

LinkedHashSet 能夠維護元素插入集合的順序,在遍歷時,按照此順序進行遍歷。

LinkedHashSet 繼承了 HashSet 類,實現(xiàn)了 Set 等接口。LinkedHashSet 仍然支持 null 元素,唯一有所區(qū)別的是在迭代時,它能夠按照元素的插入順序遍歷。

LinkedHashSet 的實現(xiàn)非常簡單,它僅僅只重新實現(xiàn)了構(gòu)造方法,將 HashSet 內(nèi)部維護的 HashMap 對象變?yōu)榱?LinkedHashMap 對象。

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

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

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

	public LinkedHashSet(Collection<? extends E> c) {
        super(Math.max(2*c.size(), 11), .75f, true);
        addAll(c);
    }

不難發(fā)現(xiàn),這里僅僅調(diào)用了父類的同一個構(gòu)造方法,查看父類的該構(gòu)造方法:

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

這里至少有三點,我們可以注意到:

訪問控制修飾符為默認,也就是說 我們并不能直接通過該構(gòu)造函數(shù)創(chuàng)建 HashSet 對象實例,否則創(chuàng)建出來的對象實例就是有序(插入順序)的了。同時,也能看出,我們繼承 HashSet 也無法獲得該構(gòu)造函數(shù);如果想要實現(xiàn)自己的HashSet,并且具有有序這一特性,應(yīng)該考慮從 LinkedHashSet 繼承。dummy 參數(shù),該參數(shù)的作用是為了區(qū)分方法簽名,因為 HashSet 已經(jīng)存在 HashSet(int,float) 這樣的構(gòu)造函數(shù)了。內(nèi)部維護的 HashMap 實例變?yōu)榱?LinkedHashMap 對象的實例。

所以,LinkedHashSet 的有序性是將父類內(nèi)部維護的 HashMap 實例更換為 LinkedHashMap 實例實現(xiàn)的,它并不需要重寫任何其它的方法。

還有個值得注意的問題,LinkedHashMap 是支持兩種排序的,一種是 插入排序(也就是現(xiàn)在這種),一種是訪問排序(構(gòu)造函數(shù)中設(shè)置 accessOrder 為 true);

既然知道了它的實現(xiàn)原理也不難理解為什么它能夠按插入順序進行迭代了,因為它完全復用了 LinkedHashMap的部分功能。

我們知道通過迭代器遍歷是可以按插入順序,那么通過 forEach 方法或者 Java 的 增強 for 循環(huán)能否有序呢?其實這兩種方法本質(zhì)上都與 java.lang.Iterable 接口有關(guān),Collection 接口實現(xiàn)了這個接口,該接口提供了返回迭代器的方法,所以歸根結(jié)底,這兩種方法也可以算迭代器遍歷。 HashSet 實現(xiàn)了 Iterable 接口的方法,返回指定 HashMap 對象實例的迭代器,所以在使用 LinkedHashSet 的 forEach 方法或者增強 for 循環(huán)時,仍然能夠按插入順序遍歷。

forEach 是Iterable接口的默認方法,默認實現(xiàn)使用了增強 for 循環(huán);增強 for 循環(huán)還可用于數(shù)組。

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

相關(guān)文章

  • IDEA 當前在線人數(shù)和歷史訪問量的示例代碼

    IDEA 當前在線人數(shù)和歷史訪問量的示例代碼

    這篇文章主要介紹了IDEA 當前在線人數(shù)和歷史訪問量的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • java調(diào)用短信貓發(fā)短信示例

    java調(diào)用短信貓發(fā)短信示例

    這篇文章主要介紹了java調(diào)用短信貓發(fā)短信示例,需要的朋友可以參考下
    2014-04-04
  • springboot vue 跨域問題的解決

    springboot vue 跨域問題的解決

    這篇文章主要介紹了springboot vue 跨域問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • SpringBoot和Springfox(Swagger)版本不兼容的解決方案

    SpringBoot和Springfox(Swagger)版本不兼容的解決方案

    documentationPluginsBootstrapper這個 bean 無法正常啟動,原因是遇到了空指針異常(NullPointerException),這通常是由于 Spring Boot 和 Springfox 的版本不兼容導致的路徑匹配策略沖突,本文給大家介紹了SpringBoot和Springfox(Swagger)版本不兼容的解決方案
    2024-12-12
  • Spring boot整合security詳解

    Spring boot整合security詳解

    Spring Security是一個功能強大且高度可定制的身份驗證和訪問控制框架,本文主要介紹了SpringBoot整合Security安全框架的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Springboot?JPA級聯(lián)操作的實現(xiàn)(一對一、一對多、多對多)

    Springboot?JPA級聯(lián)操作的實現(xiàn)(一對一、一對多、多對多)

    本文深入解析JPA中的一對一、一對多和多對多級聯(lián)操作,包括實體間的關(guān)系建立、查詢、保存、刷新和刪除等操作,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • java使用wait和notify實現(xiàn)線程通信

    java使用wait和notify實現(xiàn)線程通信

    這篇文章主要為大家詳細介紹了java如何使用wait和notify實現(xiàn)線程之間通信,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • 淺談Java枚舉的作用與好處

    淺談Java枚舉的作用與好處

    下面小編就為大家?guī)硪黄獪\談Java枚舉的作用與好處。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 淺析對Spring?aware接口理解

    淺析對Spring?aware接口理解

    通過aware接口可以獲取Spring容器相關(guān)信息,但這樣會與Spring容器耦合,這篇文章主要介紹了Spring?aware接口理解,需要的朋友可以參考下
    2022-08-08
  • SpringBoot+Mybatis項目使用Redis做Mybatis的二級緩存的方法

    SpringBoot+Mybatis項目使用Redis做Mybatis的二級緩存的方法

    本篇文章主要介紹了SpringBoot+Mybatis項目使用Redis做Mybatis的二級緩存的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論

天气| 天祝| 澎湖县| 台东县| 金平| 专栏| 乐业县| 惠州市| 扎兰屯市| 聂荣县| 苗栗市| 韶关市| 怀化市| 武安市| 南宫市| 大厂| 当雄县| 武邑县| 石棉县| 苗栗市| 苍梧县| 大英县| 平塘县| 泾阳县| 探索| 西吉县| 冕宁县| 高陵县| 青龙| 宁明县| 乐安县| 武威市| 和平县| 寻乌县| 房山区| 阿坝| 灌南县| 台北县| 英山县| 肇庆市| 锦州市|