最推荐使用 entryset() 遍历,因一次获取 key 和 value、效率高、代码清晰;keyset() 适合只关心 key 或需主动取值的场景;iterator 适用于遍历中安全删除元素;foreach + lambda 则语法简洁但受限于 lambda 规则。

Java 中遍历 HashMap 的 key 和 value 有多种常用方式,核心是利用 HashMap 提供的视图方法(keySet()、values()、entrySet())配合循环或 Stream。最推荐使用 entrySet(),因为它一次拿到 key 和 value,效率高、代码清晰。
用 entrySet() 遍历(推荐)
这是最高效、最常用的方式,避免了重复查表(比如先取 key 再 get(value)),适合需要同时访问 key 和 value 的场景。
示例代码:
HashMap<string integer> map = new HashMap();
map.put("apple", 5);
map.put("banana", 3);
map.put("orange", 7);
for (Map.Entry<string integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + " → " + value);
}
</string></string>
用增强 for 配合 keySet()
适用于只关心 key,或需要通过 key 主动获取 value 的情况(注意:每次 get() 都是一次哈希查找,性能略低)。
- 适合 key 类型简单、value 获取逻辑复杂或非必需的场景
- 如果 value 是计算得来的,或者可能为 null,这种方式更灵活
示例:
for (String key : map.keySet()) {
Integer value = map.get(key); // 注意:这里多一次哈希查找
System.out.println(key + " → " + value);
}
用 Iterator 手动遍历(兼容老版本/需中途移除元素)
当需要在遍历过程中安全删除 entry 时,必须用 Iterator,否则会抛 ConcurrentModificationException。
示例(删除 value 小于 5 的项):
Iterator<map.entry integer>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<string integer> entry = iter.next();
if (entry.getValue()
</string></map.entry>
用 Java 8+ 的 forEach + Lambda(简洁写法)
语法简洁,适合逻辑简单的遍历操作,底层仍基于 entrySet()。
示例:
map.forEach((key, value) ->
System.out.println(key + " → " + value)
);
注意:Lambda 中不能直接修改外部局部变量(需是 final 或事实 final),也不能抛受检异常。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











