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

Java遍歷Map的方法匯總

 更新時間:2023年12月18日 12:00:22   作者:老鼠只愛大米  
大家平時在使用Java開發(fā)時,經(jīng)常會遇到遍歷Map對象的問題,本文就給大家介紹幾種Java遍歷Map對象的方法,并簡單分析一下每種方法的效率,需要的朋友可以參考下

前言

大家平時在使用Java開發(fā)時,經(jīng)常會遇到遍歷Map對象的問題。本文就給大家介紹幾種Java遍歷Map對象的方法,并簡單分析一下每種方法的效率。

首先創(chuàng)建一個Map對象,初始值為3條數(shù)據(jù),用于測試代碼的編寫

Map<String,String> map = new HashMap<String,String>();
map.put("1","張三");
map.put("2","李四");
map.put("3","王五")

一、for循環(huán) + Entryset

首先通過map.entrySet()方法,可以獲取到一個Set集合,這個集合中的每一個元素就是Map中的一個鍵值對。然后通過循環(huán)遍歷這個Set集合,可以依次取出每對的鍵和值。該方法使用了foreach循環(huán),代碼簡潔明了,且能獲取Map的鍵和值,是最常見且多數(shù)情況最可取的遍歷方式。

for(Map.Entry<Integer,String> entry : map.entrySet()){
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
}

注意:for-each循環(huán)在java 5中被引入。所以該方法只能應(yīng)用于java 5及以上版本。如果遍歷Map是null,for-each循環(huán)將拋出NullPointerException,因此在遍歷前需要檢查空引用。

二、Iterator + Entryset

Entry是Map接口的內(nèi)部接口,獲取迭代器,然后循環(huán)依次取出每個迭代器里面的Entry,再通過Entry取出每個鍵值對。該種方法看起來冗余,卻是老版本java中遍歷map的唯一方式。第一種遍歷方法其實(shí)是這種方法通過語法糖做的一種編碼方式,其本質(zhì)是一樣的。所以在性能方面,兩種方法基本相同。另外,如果在遍歷過程中,有刪除某些鍵值對的需求,需要使用這種遍歷方式。

Iterator<Map.Entry<String,String>> iterator=map.entrySet().iterator();
	while(iterator.hasNext()){
	Map.Entry<String,String> entry=iterator1.next();
	System.out.println(entry.getKey());
	System.out.println(entry.getValue());
}

三、for循環(huán) + KeySet(效率低)

通過map.keySet()方法可以獲取Map的所有key的集合(set)。然后通過遍歷這個Set就可以遍歷到Map的key,如果想要同時遍歷到Map的value,則需要進(jìn)一步通過key來從Map這個集合中獲取對應(yīng)的value?!静煌扑],只能獲取key,要想獲取對應(yīng)的value,需要重復(fù)計(jì)算】

for (String key : map.keySet()) {
    System.out.println("key:" + key + ",");
    System.out.println("value:" + map.get(key));
}

這個代碼看上去比方法二簡潔,但實(shí)際上效率非常低。因?yàn)閺逆I取值是耗時的操作(與方法一、二相比,在不同的Map實(shí)現(xiàn)中該方法慢了20%~200%,所以盡量避免使用。

四、Iterator + Keyset(效率低)

與第三種方法類似,只是將循環(huán)遍歷換成了迭代器。性能提升微乎其微,同樣不推薦使用。

Iterator<String> iterator=map.keySet().iterator();
while (iterator.hasNext()){
    String key = iterator.next();
    System.out.println(key);
    System.out.println(map.get(key));
}

五、lambda表達(dá)式

從Java8開始,Java提供了對Lambda表達(dá)式的支持,通過Lambda表達(dá)式可以使代碼更簡潔,這其中就包括用Lambda表達(dá)式實(shí)現(xiàn)遍歷Map的功能。

map.forEach((key,value)->{
    System.out.println(key);
    System.out.println(value);
});

Lambda表達(dá)式的forEach方法,其實(shí)就是一種語法糖,可以讓代碼更加簡潔,使用更加方便。查看源碼,我們可以發(fā)現(xiàn),這種方式也是對entrySet遍歷方式的一種包裝。

六、Stream流

map.entrySet().stream().forEach((Map.Entry<Integer, String> entry) -> {
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
});

總結(jié)

1.EntrySet的方式比KeySet性能要好,原因在于keySet相當(dāng)于遍歷了2次。

2.map.get(key)是計(jì)算密集型操作,很耗費(fèi)CPU。

3.EntrySet的Iterator遍歷的效率比for循環(huán)效率更好。

4.lambda 表達(dá)式和Entryset的底層原理相同,且語法更加簡潔。

結(jié)論:JAVA8以下推薦使用方法一、二,JAVA8及以上,推薦使用方法五。

到此這篇關(guān)于Java遍歷Map的方法匯總的文章就介紹到這了,更多相關(guān)Java遍歷Map內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot啟動之SpringApplication初始化詳解

    SpringBoot啟動之SpringApplication初始化詳解

    這篇文章主要介紹了SpringBoot啟動之SpringApplication初始化詳解,首先初始化資源加載器,默認(rèn)為null;斷言判斷主要資源類不能為null,否則報(bào)錯,需要的朋友可以參考下
    2024-01-01
  • Java ProcessBuilder執(zhí)行多次CMD命令的使用

    Java ProcessBuilder執(zhí)行多次CMD命令的使用

    本文介紹了Java的ProcessBuilder類,該類用于執(zhí)行外部命令,通過ProcessBuilder,我們可以在Java程序中靈活地執(zhí)行多次CMD命令,并控制輸入輸出流以及工作目錄等,感興趣的可以了解一下
    2024-11-11
  • Mybatis處理List參數(shù)過程

    Mybatis處理List參數(shù)過程

    本文詳細(xì)介紹了Mybatis處理List參數(shù)的方法,通過實(shí)體類StudentInfo示例,展示了兩種不同類型的List傳參查詢,涵蓋從前期準(zhǔn)備SQL到Mapper接口及XML配置的全過程
    2026-05-05
  • 解決SpringBoot web項(xiàng)目啟動后立即關(guān)閉的問題

    解決SpringBoot web項(xiàng)目啟動后立即關(guān)閉的問題

    這篇文章主要介紹了解決SpringBoot web項(xiàng)目啟動后立即關(guān)閉的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java使用@Transactional時常犯的N種錯誤

    java使用@Transactional時常犯的N種錯誤

    @Transactional是我們在用Spring時候幾乎逃不掉的一個注解,本文主要介紹了使用?@Transactional?時常犯的N種錯誤,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • MyBatis-Plus?條件查詢器的實(shí)現(xiàn)

    MyBatis-Plus?條件查詢器的實(shí)現(xiàn)

    本文主要介紹了MyBatis-Plus?條件查詢器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 基于Java實(shí)現(xiàn)XML文件的解析與更新

    基于Java實(shí)現(xiàn)XML文件的解析與更新

    配置文件可以有很多種格式,包括?INI、JSON、YAML?和?XML。每一種編程語言解析這些格式的方式都不同。本文將通過Java語言實(shí)現(xiàn)XML文件的解析與更新,需要的可以參考一下
    2022-03-03
  • Java使用quartz實(shí)現(xiàn)定時任務(wù)示例詳解

    Java使用quartz實(shí)現(xiàn)定時任務(wù)示例詳解

    這篇文章主要為大家介紹了Java使用quartz實(shí)現(xiàn)定時任務(wù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java實(shí)現(xiàn)一個小說采集程序的簡單實(shí)例

    Java實(shí)現(xiàn)一個小說采集程序的簡單實(shí)例

    下面小編就為大家?guī)硪黄狫ava實(shí)現(xiàn)一個小說采集程序的簡單實(shí)例。小編覺得挺不錯的, 現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java利用Map實(shí)現(xiàn)計(jì)算文本中字符個數(shù)

    Java利用Map實(shí)現(xiàn)計(jì)算文本中字符個數(shù)

    這篇文章主要為大家詳細(xì)介紹了Java如何利用Map集合實(shí)現(xiàn)計(jì)算文本中字符個數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08

最新評論

安陆市| 土默特左旗| 鸡东县| 宁夏| 四子王旗| 北川| 玉山县| 花垣县| 潼关县| 梓潼县| 龙川县| 乳山市| 广德县| 太仓市| 秦安县| 宝丰县| 景谷| 永仁县| 新丰县| 龙井市| 嘉黎县| 宜黄县| 夹江县| 塔城市| 达拉特旗| 邯郸市| 芜湖县| 咸宁市| 拜泉县| 多伦县| 内丘县| 尖扎县| 鲁甸县| 葵青区| 璧山县| 溆浦县| 泰兴市| 兴文县| 乌兰察布市| 什邡市| 玉山县|