前言
最近在看《阿里巴巴Java開發手冊(華山版)》,看到了關於Map的遍歷方式,手冊上寫的很詳細,我這裏用代碼再來展示一遍。
代碼
public static void main(String[] args) {
Map<String, String> hm = new HashMap<String, String>();
hm.put("a", "1");
hm.put("b", "2");
// 1. keySet
for (String key : hm.keySet()) {
System.out.println(key + ": " + hm.get(key));
}
System.out.println("-----------");
// 2. entrySet
for (Entry<String, String> entry : hm.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
System.out.println("-----------");
// 3. forEach
hm.forEach((key, value) -> {
System.out.println(key + ": " + value);
});
}
運行結果:
說明(來自阿里巴巴Java開發手冊):
- keySet 其實是遍歷了 2 次,一次是轉爲 Iterator 對象,另一次是從 hashMap 中取出 key 所對應的 value。
- 而 entrySet 只是遍歷了一次就把 key 和 value 都放到了 entry 中,效率更高。
- 如果是 JDK8,使用 Map.forEach 方法。
所以,推薦使用entrySet,如果是JDK8,則推薦forEach。