1. 程式人生 > >演算法學習——Map的四種遍歷方法詳解

演算法學習——Map的四種遍歷方法詳解

參考文獻: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);
 
}