最常用且推荐的方式是使用 entrySet() 配合增强 for 循环;也可用 keySet() 遍历键再 get() 取值、values() 遍历值,或迭代器实现安全删除。

Java 中遍历 HashMap 的所有键值对,最常用且推荐的方式是使用 entrySet() 配合增强 for 循环或迭代器。
用 entrySet() + 增强 for 循环(最常用)
这是清晰、高效、可读性强的方式,直接获取键值对(Map.Entry)对象:
HashMap<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", 35);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + " → " + value);
}
用 keySet() 遍历键,再 get() 获取值(适合只关心键的场景)
如果逻辑中主要操作键,偶尔需要值,这种方式也合理;但注意:每次 get() 都是一次哈希查找,性能略低于 entrySet():
- 适用于键存在性判断多、取值少的场景
- 代码示例:
for (String key : map.keySet()) { Integer value = map.get(key); // 注意:key 不存在时返回 null(对非 null 值类型需防 NPE) System.out.println(key + " → " + value); }
用 values() 遍历所有值(不关心键时)
当只需要处理值本身,完全不需要键,用这个最简洁:
立即学习“Java免费学习笔记(深入)”;
for (Integer value : map.values()) {
System.out.println("Value: " + value);
}
用迭代器(适合边遍历边删除)
如果要在遍历过程中删除某些条目,必须用迭代器的 remove() 方法,否则会抛 ConcurrentModificationException:
Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, Integer> entry = iter.next();
if (entry.getValue() < 30) {
iter.remove(); // 安全删除
}
}
不复杂但容易忽略:避免在 for-each 中直接调用 map.remove(key),那会触发并发修改异常。


















