Java遍历HashMap有四种方式:①keySet()遍历键;②values()遍历值;③entrySet()遍历键值对(最常用,性能优);④JDK8+ forEach(Lambda)遍历。修改时须用Iterator.remove()避免并发修改异常。

Java 中遍历 HashMap 有多种方式,核心在于根据需求选择最合适的遍历目标:只取键(keySet())、只取值(values())、或同时取键和值(entrySet())。JDK 8 后还支持更简洁的 Lambda 遍历方式。
遍历所有键(Key)
使用 keySet() 方法获取键的集合,再用增强 for 循环或迭代器遍历:
-
map.keySet()返回Set<K>,不保证顺序(底层哈希表无序) - 适合只需要键、不需要对应值的场景,比如判断是否存在某 key 或批量删除
示例:
for (String key : map.keySet()) {System.out.println("Key: " + key);
}
遍历所有值(Value)
使用 values() 方法获取值的集合:
立即学习“Java免费学习笔记(深入)”;
-
map.values()返回Collection<V>,允许重复值 - 无法通过值反查键,也不体现键值关联关系
示例:
for (Integer value : map.values()) {System.out.println("Value: " + value);
}
遍历键值对(Entry)——最常用
使用 entrySet() 获取 Map.Entry<K,V> 集合,既能访问 key,也能访问 value,性能优于分别遍历 keySet + get(key):
- 每个
Entry对象包含getKey()和getValue()方法 - 推荐用于需要同时处理键和值的逻辑,如格式化输出、条件过滤、统计等
示例(传统方式):
for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + " → " + entry.getValue());
}
示例(JDK 8+ Lambda 方式):
map.forEach((key, value) ->System.out.println(key + " → " + value));
注意事项
遍历时若需修改 HashMap(如删除),必须使用 Iterator.remove(),不能直接调用 map.remove(),否则会抛出 ConcurrentModificationException:
while (iter.hasNext()) {
Map.Entry<String, Integer> e = iter.next();
if (e.getValue() < 10) {
iter.remove(); // 安全删除
}
}


















