演算法學習——Map的四種遍歷方法詳解
阿新 • • 發佈:2018-11-08
參考文獻:Java中如何遍歷Map物件的4種方法
java中的所有map都實現了Map介面,以下方法適用於任何map實現(HashMap, TreeMap, LinkedHashMap, Hashtable, and so on)
- 方法一 在for-each迴圈中使用entries來遍歷
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Map.Entry<Integer, Integer> entry : map.entrySet() ) {
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
如果你遍歷的是一個空的map物件,for-each迴圈將丟擲NullPointerException,因此在遍歷前你總是應該檢查空引用。
這個叫做增強FOR迴圈,總的來說也還是一個for迴圈而已。
你要迴圈的東西是map.entryset()也就是說把這個map拆開,然後在for迴圈裡迴圈,每次迴圈可以得到一個
Entry<String,Integer> entry物件,在迴圈裡被處理。 比如
sting[] strs={'aaa','bbb','ccc','ddd'};
for(String s:strs){
System.out.pringln(s);
}
結果就是:
aaa
bbb
ccc
注:entrySet()方法 返回此對映中包含的對映關係的 set 檢視集合 ···············Map.Entry 表示單個對映關係即一個key+value
for(宣告迴圈變數:陣列的名字){
.
.
.
}
宣告的迴圈變數的型別必須和陣列的型別相同
注意:“宣告迴圈變數”必須是變數宣告,不可以使用已經宣告過的變數。
- 方法二 在for-each迴圈中遍歷keys或values。
如果只需要map中的鍵或者值,你可以通過keySet或values來實現遍歷,而不是用entrySet。
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
//遍歷map中的鍵
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
//遍歷map中的值
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
該方法比entrySet遍歷在效能上稍好,而且程式碼更加乾淨。
- 方法三使用Iterator遍歷
**使用泛型**
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<Integer, Integer> entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
**不適用泛型**
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}
可以在遍歷時呼叫iterator.remove()來刪除entries。
- 方法四、通過鍵找值遍歷(效率低)
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (Integer key : map.keySet()) {
Integer value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}