Java中遍歷Map集合的5種方式總結(jié)

這篇文章主要給大家介紹了關(guān)于Java中遍歷Map集合的5種方式主慰,文中通過示例代碼介紹的非常詳細摇展,對大家的學習或者工作具有一定的參考學習價值房蝉,需要的朋友們下面隨著小編來一起學習學習吧

方式一 通過Map.keySet使用iterator遍歷

@Test
public void testHashMap1() {
 Map<Integer, String> map = new HashMap<>();
 map.put(001, "Java");
 map.put(002, "數(shù)據(jù)庫");
 map.put(003, "Vue");
 System.out.println(map);
 
 // 通過Map.keySet使用iterator遍歷key,然后通過key得到對應的value值
 Iterator<Integer> iterator = map.keySet().iterator();
 while (iterator.hasNext()) {
 Integer key = iterator.next();
 String value = map.get(key);
 System.out.println("key = " + key + ", value = " + value);
 }
}

結(jié)果:

{1=Java, 2=數(shù)據(jù)庫, 3=Vue}
key = 1, value = Java
key = 2, value = 數(shù)據(jù)庫
key = 3, value = Vue

方式二 通過Map.entrySet使用iterator遍歷

@Test
public void testHashMap2() {
 Map<Integer, String> map = new HashMap<>();
 map.put(001, "Java");
 map.put(002, "數(shù)據(jù)庫");
 map.put(003, "Vue");
 System.out.println(map);
 
 // 通過Map.entrySet使用iterator遍歷key和value颊郎;注意 Set entrySet():返回所有key-value對構(gòu)成的Set集合
 Iterator<Map.Entry<Integer, String>> entries = map.entrySet().iterator();
 while (entries.hasNext()) {
 Map.Entry<Integer, String> entry = entries.next();
 System.out.println(entry);
 }//加入Java開發(fā)交流君樣:756584822一起吹水聊天
}

結(jié)果:

{1=Java, 2=數(shù)據(jù)庫, 3=Vue}
1=Java
2=數(shù)據(jù)庫
3=Vue

方式三 通過Map.keySet遍歷

@Test
public void testHashMap3() {
 Map<Integer, String> map = new HashMap<>();
 map.put(001, "Java");
 map.put(002, "數(shù)據(jù)庫");
 map.put(003, "Vue");
 System.out.println(map);
 
 // 通過Map.keySet遍歷key,然后通過key得到對應的value值
 for (Integer key : map.keySet()) {
 System.out.println("key = " + key + ", value = " + map.get(key));
 }
}

結(jié)果:

{1=Java, 2=數(shù)據(jù)庫, 3=Vue}
key = 1, value = Java
key = 2, value = 數(shù)據(jù)庫
key `= 3, value = Vue

方式四 通過For-Each迭代entries叔遂,使用Map.entrySet遍歷

@Test
public void testHashMap4() {
 Map<Integer, String> map = new HashMap<>();
 map.put(001, "Java");
 map.put(002, "數(shù)據(jù)庫");
 map.put(003, "Vue");
 System.out.println(map);
 
 // 使用For-Each迭代entries他炊,通過Map.entrySet遍歷key和value
 for (Map.Entry<Integer, String> entry : map.entrySet()) {
 System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
 }
}//加入Java開發(fā)交流君樣:756584822一起吹水聊天
{1=Java, 2=數(shù)據(jù)庫, 3=Vue}
key = 1, value = Java
key = 2, value = 數(shù)據(jù)庫
key = 3, value = Vue

方式五 使用lambda表達式forEach遍歷

@Test
public void testHashMap5() {
 Map<Integer, String> map = new HashMap<>();
 map.put(001, "Java");
 map.put(002, "數(shù)據(jù)庫");
 map.put(003, "Vue");
 System.out.println(map);
 
    // 使用lambda表達式forEach遍歷
 map.forEach((k, v) -> System.out.println("key = " + k + ", value = " + v));
}//加入Java開發(fā)交流君樣:756584822一起吹水聊天

forEach 源碼

default void forEach(BiConsumer<? super K, ? super V> action) {
 Objects.requireNonNull(action);
 for (Map.Entry<K, V> entry : entrySet()) {
  K k;
  V v;
  try {
  k = entry.getKey();
  v = entry.getValue();
  } catch(IllegalStateException ise) {
  // this usually means the entry is no longer in the map.
  throw new ConcurrentModificationException(ise);
  }//加入Java開發(fā)交流君樣:756584822一起吹水聊天
  action.accept(k, v);
 }
 }

從源碼可以看到,這種新特性就是在傳統(tǒng)的迭代方式上加了一層殼已艰,但是讓代碼變得更加簡單痊末。(開發(fā)中推薦使用)

總結(jié)

推薦使用 entrySet 遍歷 Map 類集合 KV (文章中的第四種方式),而不是 keySet 方式進行遍歷哩掺。

keySet 其實是遍歷了 2 次凿叠,第一次是轉(zhuǎn)為 Iterator 對象,第二次是從 hashMap 中取出 key 所對應的 value值嚼吞。而 entrySet 只是遍歷了一次盒件,就把 key 和 value 都放到了 entry 中,效率更高舱禽。

values()返回的是 V 值集合炒刁,是一個 list 集合對象;keySet()返回的是 K 值集合誊稚,是一個 Set 集合對象翔始;entrySet()返回的是 K-V 值組合集合。

如果是 JDK8里伯,推薦使用Map.forEach 方法(文章中的第五種方式)城瞎。

最新2020整理收集的一些高頻面試題(都整理成文檔),有很多干貨疾瓮,包含mysql脖镀,netty,spring狼电,線程认然,spring cloud补憾、jvm、源碼卷员、算法等詳細講解盈匾,也有詳細的學習規(guī)劃圖,面試題整理等毕骡,需要獲取這些內(nèi)容的朋友請加Q君樣:756584822

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末削饵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子未巫,更是在濱河造成了極大的恐慌窿撬,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叙凡,死亡現(xiàn)場離奇詭異劈伴,居然都是意外死亡,警方通過查閱死者的電腦和手機握爷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門跛璧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人新啼,你說我怎么就攤上這事追城。” “怎么了燥撞?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵座柱,是天一觀的道長。 經(jīng)常有香客問我物舒,道長色洞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任冠胯,我火速辦了婚禮火诸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涵叮。我一直安慰自己惭蹂,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布割粮。 她就那樣靜靜地躺著盾碗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舀瓢。 梳的紋絲不亂的頭發(fā)上廷雅,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音,去河邊找鬼航缀。 笑死商架,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的芥玉。 我是一名探鬼主播蛇摸,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灿巧!你這毒婦竟也來了赶袄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抠藕,失蹤者是張志新(化名)和其女友劉穎饿肺,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盾似,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡敬辣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了零院。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溉跃。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖门粪,靈堂內(nèi)的尸體忽然破棺而出喊积,到底是詐尸還是另有隱情烹困,我是刑警寧澤玄妈,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站髓梅,受9級特大地震影響拟蜻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜枯饿,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一酝锅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奢方,春花似錦搔扁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鹊奖,卻和暖如春苛聘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工设哗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唱捣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓网梢,卻偏偏與公主長得像震缭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子战虏,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容