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

Java有序的Map LinkedHashMap用法詳解

 更新時(shí)間:2024年01月30日 11:17:33   作者:野猿新一  
LinkedHashMap是Java提供的一個(gè)集合類,它繼承自HashMap,并在HashMap基礎(chǔ)上維護(hù)一條雙向鏈表,本文給大家介紹java 有序的Map LinkedHashMap簡(jiǎn)介,感興趣的朋友一起看看吧

LinkedHashMap

1.定義:

LinkedHashMap是HashMap和雙向鏈表的合二為一,即一個(gè)將所有Entry節(jié)點(diǎn)鏈入一個(gè)雙向鏈表的HashMap(LinkedHashMap = HashMap + 雙向鏈表)

LinkedHashMap和HashMap是Java Collection Framework 的重要成員,也是Map族(如下圖所示)
LinkedHashMap是HashMap的子類(擁有HashMap的所有特性)
LinkedHashMap和HashMap最多只允許一條Entry的鍵為Null(多條會(huì)覆蓋),但允許多條Entry的值為Null
LinkedHashMap 也是 Map 的一個(gè)非同步的實(shí)現(xiàn)
LinkedHashMap很好的支持LRU算法
HashMap是無(wú)序的,LinkedHashMap通過(guò)維護(hù)一個(gè)額外的雙向鏈表保證了迭代順序
迭代順序可以是插入順序,也可以是訪問(wèn)順序(即根據(jù)鏈表中元素的順序可以將LinkedHashMap分為:保持插入順序的LinkedHashMap和保持訪問(wèn)順序的LinkedHashMap,其中LinkedHashMap的默認(rèn)實(shí)現(xiàn)是按插入順序排序的)

LinkedHashMap簡(jiǎn)介

LinkedHashMap是Java提供的一個(gè)集合類,它繼承自HashMap,并在HashMap基礎(chǔ)上維護(hù)一條雙向鏈表,使得具備如下特性:

支持遍歷時(shí)會(huì)按照插入順序有序進(jìn)行迭代。
支持按照元素訪問(wèn)順序排序,適用于封裝LRU緩存工具。
因?yàn)閮?nèi)部使用雙向鏈表維護(hù)各個(gè)節(jié)點(diǎn),所以遍歷時(shí)的效率和元素個(gè)數(shù)成正比,相較于和容量成正比的HashMap來(lái)說(shuō),迭代效率會(huì)高很多。
LinkedHashMap邏輯結(jié)構(gòu)如下圖所示,它是在HashMap基礎(chǔ)上在各個(gè)節(jié)點(diǎn)之間維護(hù)一條雙向鏈表,使得原本散列在不同bucket上的節(jié)點(diǎn)、鏈表、紅黑樹(shù)有序關(guān)聯(lián)起來(lái)。

下面看下java 有序的Map LinkedHashMap簡(jiǎn)介,內(nèi)容如下所示:

無(wú)序的HashMap

我們知道HashMap是無(wú)需的,數(shù)據(jù)并不是按我們插入的順序排序的,我們可以驗(yàn)證下

public class Test6 {
    public static void main(String[] args) {
        Map<String, String> hashMap = new HashMap<String, String>();
        hashMap.put("name1", "value1");
        hashMap.put("name2", "value2");
        hashMap.put("name3", "value3");
        Set<Entry<String, String>> set = hashMap.entrySet();
        Iterator<Entry<String, String>> iterator = set.iterator();
        while(iterator.hasNext()) {
            Entry<String, String> entry = iterator.next();
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            System.out.println("key:" + key + ", value:" + value);
        }
    }
}

 可以看到輸出結(jié)果并不是按數(shù)據(jù)插入的順序的

key:name3, value:value3
key:name2, value:value2
key:name1, value:value1

有序的LinkedHashMap

要想實(shí)現(xiàn)有序的Map,我們可以用LinkedHashMap,下面驗(yàn)證一下,把原來(lái)代碼的HashMap替換成LinkedHashMap

public class Test6 {
    public static void main(String[] args) {
        Map<String, String> hashMap = new LinkedHashMap<String, String>();
        hashMap.put("name1", "value1");
        hashMap.put("name2", "value2");
        hashMap.put("name3", "value3");
        Set<Entry<String, String>> set = hashMap.entrySet();
        Iterator<Entry<String, String>> iterator = set.iterator();
        while(iterator.hasNext()) {
            Entry<String, String> entry = iterator.next();
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            System.out.println("key:" + key + ", value:" + value);
        }
    }
}

可以看到輸出結(jié)果為我們插入的順序 

key:name1, value:value1
key:name2, value:value2
key:name3, value:value3

到此這篇關(guān)于java 有序的Map LinkedHashMap簡(jiǎn)介的文章就介紹到這了,更多相關(guān)java Map LinkedHashMap內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自定義MessageConverter與內(nèi)容協(xié)商管理器contentNegotiationManager詳解

    SpringBoot自定義MessageConverter與內(nèi)容協(xié)商管理器contentNegotiationManag

    這篇文章主要介紹了SpringBoot自定義MessageConverter與內(nèi)容協(xié)商管理器contentNegotiationManager的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • Java基礎(chǔ)知識(shí)之成員變量和局部變量淺顯易懂總結(jié)

    Java基礎(chǔ)知識(shí)之成員變量和局部變量淺顯易懂總結(jié)

    從語(yǔ)法形式上,看成員變量是屬于類的,而局部變量是在方法中定義的變量或是方法的參數(shù);成員變量可以被public,private,static等修飾符所修飾,而局部變量不能被訪問(wèn)控制修飾符及static所修飾
    2021-09-09
  • Java log4j詳細(xì)教程

    Java log4j詳細(xì)教程

    日志是應(yīng)用軟件中不可缺少的部分,Apache的開(kāi)源項(xiàng)目log4j是一個(gè)功能強(qiáng)大的日志組件,提供方便的日志記錄。在apache網(wǎng)站:jakarta.apache.org/log4j 可以免費(fèi)下載到Log4j最新版本的軟件包
    2015-11-11
  • Java?RabbitMQ的持久化和發(fā)布確認(rèn)詳解

    Java?RabbitMQ的持久化和發(fā)布確認(rèn)詳解

    這篇文章主要為大家詳細(xì)介紹了RabbitMQ的持久化和發(fā)布確認(rèn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 使用Mybatis-plus策略自動(dòng)更新數(shù)據(jù)庫(kù)時(shí)間失敗問(wèn)題解決

    使用Mybatis-plus策略自動(dòng)更新數(shù)據(jù)庫(kù)時(shí)間失敗問(wèn)題解決

    這篇文章主要介紹了使用Mybatis-plus策略自動(dòng)更新數(shù)據(jù)庫(kù)時(shí)間失敗問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • idea導(dǎo)入項(xiàng)目爆紅問(wèn)題記錄以及解決

    idea導(dǎo)入項(xiàng)目爆紅問(wèn)題記錄以及解決

    這篇文章主要介紹了idea導(dǎo)入項(xiàng)目爆紅問(wèn)題記錄以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • JAVA正則表達(dá)式校驗(yàn)qq號(hào)碼的方法

    JAVA正則表達(dá)式校驗(yàn)qq號(hào)碼的方法

    Java作為一種開(kāi)發(fā)語(yǔ)言,有許多值得推薦的地方,但是它一直以來(lái)沒(méi)有自帶對(duì)正則表達(dá)式的支持。下面小編給大家?guī)?lái)了JAVA正則表達(dá)式校驗(yàn)qq號(hào)碼的方法,需要的朋友參考下吧
    2018-04-04
  • java獲取網(wǎng)絡(luò)圖片上傳到OSS的方法

    java獲取網(wǎng)絡(luò)圖片上傳到OSS的方法

    這篇文章主要為大家詳細(xì)介紹了java獲取網(wǎng)絡(luò)圖片上傳到OSS,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Java使用dom4j解析XML

    Java使用dom4j解析XML

    dom4j是一個(gè)開(kāi)源的、基于Java的XML解析庫(kù),而在Java中使用dom4j庫(kù)解析XML是一種常見(jiàn)的方法,下面就跟隨小編一起來(lái)學(xué)習(xí)一下Java如何使用dom4j解析XML吧
    2024-12-12
  • Java消息隊(duì)列JMS實(shí)現(xiàn)原理解析

    Java消息隊(duì)列JMS實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Java消息隊(duì)列JMS實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論

津南区| 万源市| 黄大仙区| 双柏县| 科技| 咸丰县| 随州市| 夏邑县| 西青区| 龙井市| 龙井市| 西吉县| 从化市| 敦煌市| 鹿泉市| 阿克苏市| 西城区| 洞口县| 上高县| 康乐县| 康乐县| 邮箱| 龙岩市| 玉树县| 河南省| 武功县| 体育| 安达市| 都江堰市| 富锦市| 枣强县| 宁明县| 宜州市| 桐城市| 阳江市| 宁明县| 永新县| 宝清县| 定襄县| 忻州市| 梅河口市|