生活随笔
收集整理的這篇文章主要介紹了
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
<String, Integer> inter1
= new HashMap<String, Integer>();inter1
.put("張三", 20);inter1
.put("李四", 22);HashMap
<String, Integer> inter2
= new HashMap<String, Integer>();inter2
.put("王五", 21);inter2
.put("趙六", 23);HashMap
<HashMap
<String, Integer>, HashMap
<String, Integer>> out
= new HashMap<HashMap
<String, Integer>, HashMap
<String, Integer>>();out
.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
) {Set
<String> keystrSet
= keyMap
.keySet() ;for (String keystring
: keystrSet
) {Integer keyMapin
= keyMap
.get(keystring
);System
.out
.println(keystring
+"\t"+ keyMapin
);}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()方法取出每個對象中的鍵和值
System
.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()---------------------------");for (HashMap
<String, Integer> keyMap
: out
.keySet()) {for (String string
: keyMap
.keySet()) {System
.out
.println(string
);}for (Integer integer
: keyMap
.values()) {System
.out
.println(integer
);}}for (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循環.
使用迭代器的時候,僅僅寫泛型的時候就挺麻煩的,如果一個地方的泛型沒有寫正確就會報錯,這種問題需要找好久
.
System
.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
<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
<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集合的四种遍历方式的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。