日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中Map集合的四种遍历方式

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中Map集合的四种遍历方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java中Map集合的四種遍歷方式

Map接口和Collection接口的集合不同,Map集合是雙列的,Collection是單列的.Map集合將鍵映射到值的對象.

雙列的集合遍歷起來也是比較麻煩些的,特別是嵌套的map集合,這里說下MAP集合的四種遍歷方式,并且以嵌套的hashMap集合為例, 遍歷一下。

import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set;public class ThreeHashmap {public static void main(String[] args) {//內層的HashMap inter1HashMap<String, Integer> inter1 = new HashMap<String, Integer>();inter1.put("張三", 20);inter1.put("李四", 22);//內層的HashMap inter2HashMap<String, Integer> inter2 = new HashMap<String, Integer>();inter2.put("王五", 21);inter2.put("趙六", 23);//外層的HashMap out,里面的鍵- 值是兩個HashMapHashMap<HashMap<String, Integer>, HashMap<String, Integer>> out = new HashMap<HashMap<String, Integer>, HashMap<String, Integer>>();//外層的HashMap out,放進去hashMap ,鍵- 值是兩個HashMapout.put(inter1, inter2);

首先是兩個hashMap<String, Integer>,然后是一個大的HashMap<HashMap<String, Integer>, HashMap<String, Integer>>, 里面鍵和值都是hasMap.然后就是去遍歷

方式一:根據鍵找值
1,用keySet()方法 獲取所有鍵的集合Set,
2.遍歷鍵的集合,獲取到每一個鍵key
3.用get(Object key)方法,根據鍵找到每一個對應的值,然后輸出鍵和值

System.out.println("---方式1:Map.keySet()取得鍵的set集合,取得鍵,然后Map.get(key)取得值");Set<HashMap<String, Integer>> setout=out.keySet();for (HashMap<String, Integer> keyMap : setout) {//內層鍵位的hashMap,遍歷Set<String> keystrSet = keyMap.keySet() ;for (String keystring : keystrSet) {Integer keyMapin = keyMap.get(keystring);System.out.println(keystring+"\t"+ keyMapin);}//get(keyMap) 獲得對應的值位的 hashMap,然后重復同樣的方法遍歷HashMap<String, Integer> valueMap= out.get(keyMap);Set<String> set = valueMap.keySet();for (String str : set) {Integer in = valueMap.get(str);System.out.println(str+"\t"+in);}}

方式二:根據鍵值對對象找鍵和值
1.用entrySet()方法獲得值對對象的集合 Set<Map.Entry<K,V>>
2,for循環遍歷鍵值對對象的集合Set<Map.Entry<K,V>>,獲得每一個鍵值對,
3,然后用Entry.getKey()和Entry.getValue()方法取出每個對象中的鍵和值

//方法2 entrysetSystem.out.println("---------方式2:Map.entrySet()配合getKey(),getValue()獲得鍵和值------------");Set<Map.Entry<HashMap<String, Integer>, HashMap<String, Integer>>> outentrySET=out.entrySet();for (java.util.Map.Entry<HashMap<String, Integer>, HashMap<String, Integer>> entry : outentrySET) {HashMap<String, Integer> keyMap = entry.getKey();HashMap<String, Integer> valueMap = entry.getValue();Set<Map.Entry<String,Integer>> keyentrySet = keyMap.entrySet();for (Map.Entry<String, Integer> keyentry : keyentrySet) {System.out.println(keyentry.getKey()+"\t"+ keyentry.getValue());}Set<Map.Entry<String, Integer>> valueEntrySet = valueMap.entrySet();for (Map.Entry<String, Integer> valueentry : valueEntrySet) {System.out.println(valueentry.getKey()+"\t" + valueentry.getValue());}}

方式三: 分別獲得鍵 和 值 ,遍歷輸出
1. map.keySet()獲得所有鍵的集合Set
2. Map.value()取得值的集合Collection
3. 分別用for循環遍歷取得每一個鍵和值.
這種方法的缺點是,取得的鍵不能和對應的值連到一起,適合只需要鍵 或者值得時候.

System.out.println("-------------------方式三: Map.keySet(),Map.value()---------------------------");//方式三 map.keySet(), Map.value()只能分別取得鍵和值的集合,遍歷輸出鍵和值,不能連到一起,有缺點,適合于只需要鍵或值得時候-//Map.keySet()鍵位的 hashMap for (HashMap<String, Integer> keyMap : out.keySet()) {//-Map.keySet(),Map.value()只能分別取得鍵和值,不能連到一起,有缺點,適合于只需要鍵或值得時候-for (String string : keyMap.keySet()) {System.out.println(string);}for (Integer integer : keyMap.values()) {System.out.println(integer);}}//Map.value() 獲得值 的 hashMapfor (HashMap<String, Integer> hashMap : out.values()) {for (Entry<String, Integer> entry : hashMap.entrySet()) {System.out.println(entry.getKey()+"\t"+ entry.getValue());}}

方式四: 使用獲得鍵值對對象集合+迭代器
1.用entrySet()方法獲得值對對象的集合 Set<Map.Entry<K,V>>
2,然后用迭代器Iterator()遍歷出每一個鍵-值對對象
3, 使用Entry.getKey()和Entry.getValue()方法取出每個對象中的鍵和值
其實和鍵值對對象配合增強for循環找鍵和值的方式類似, 沒有特殊要求的時候更提倡使用鍵值對對象配合增強for循環.
使用迭代器的時候,僅僅寫泛型的時候就挺麻煩的,如果一個地方的泛型沒有寫正確就會報錯,這種問題需要找好久
.

//方式4System.out.println("-------------------方式四: Map.entrySet()+迭代器 +-----------------------");Iterator<Entry<HashMap<String, Integer>, HashMap<String, Integer>>> iterator = out.entrySet().iterator();while ( iterator.hasNext()) {Entry<HashMap<String, Integer>, HashMap<String, Integer>> outEntry = iterator.next();//內層鍵位hashMap繼續用Map.entrySet()+迭代器 遍歷HashMap<String, Integer> keyMap = outEntry.getKey();Iterator<Entry<String, Integer>> iteratorkeyMap = keyMap.entrySet().iterator();for ( ;iteratorkeyMap.hasNext();) {Entry<String, Integer> keyentry = iteratorkeyMap.next();System.out.println(keyentry.getKey()+"\t"+ keyentry.getValue());}//內層值位hashMap繼續用迭代器+ Map.entrySet遍歷HashMap<String, Integer> valueMap = outEntry.getValue();Set<Entry<String, Integer>> valueentrySet = valueMap.entrySet();Iterator<Entry<String, Integer>> iteratorvaluemap = valueentrySet.iterator();while(iteratorvaluemap.hasNext()){Entry<String, Integer> valueEntry = iteratorvaluemap.next();System.out.println(valueEntry.getKey()+"\t"+ valueEntry.getValue());}}} }

遍歷的時候,可以使用鏈式編程的地方,就使用鏈式編程,這樣可以讓程序看起來更簡潔易懂,特別是嵌套集合遍歷的時候,只是寫泛型
就寫到超出一行超出屏幕,看起來就頭疼 .而且 map.keySet()獲得的Set集合, Map.value()獲得的colection集合,常常容易混淆,
還有那長長的泛型,真的看起來很冗長.那些每行都超出屏幕的代碼,一眼看不到頭,真的讓人頭痛.
其實我們知道這個集合里放的是什么類型就可以直接用鏈式編程獲得最后的數據,這樣就省去了中間的類型定義,還有那長長的泛型標記,
這樣程序看起來也更簡潔易懂. 這就好像我們很渴需要喝水的時候,我們需要的是快點喝水,并不會在乎我們拿到的杯子是
什么品牌,杯子的容量是多少,我們知道杯子里面是可以解渴的水,最直接的方式就是打開杯子喝水.

總結

以上是生活随笔為你收集整理的java中Map集合的四种遍历方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。