使用For-Each迭代entries
這是最常見的方法,並在大多數情況下更可取的。當你在循環中需要使用Map的鍵和值時,就可以使用這個方法
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())
}
注意:For-Each循環是Java5新引入的,所以只能在Java5以上的版本中使用。如果你遍歷的map是null的話,For-Each循環會拋出NullPointerException異常,所以在遍歷之前你應該判斷是否為空引用。
使用For-Each迭代keys和values
如果你只需要用到map的keys或values時,你可以遍歷KeySet或者values代替entrySet
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
//iterating over keys only
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
//iterating over values only
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
這個方法比entrySet迭代具有輕微的性能優勢(大約快10%)並且代碼更簡潔。
使用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);
}
迭代keys並搜索values
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);
}
這五種方法都有其自己所適用的情況,大部分情況我都會喜歡使用迭代器來完成map的遍歷,你呢?