Java遍历HashMap应使用entrySet()、keySet()或values()获取迭代器,推荐entrySet()+Iterator方式;keySet()适合仅需键的场景;values()适用于只处理值的情况;注意线程不安全及遍历时修改异常。

Java 中遍历 HashMap 通过迭代器实现,核心是获取其 entrySet()、keySet() 或 values() 的迭代器,再用 Iterator 的 hasNext() 和 next() 方法逐个访问。不推荐直接对 HashMap 本身调用 iterator()(它没有该方法)。
用 entrySet() + Iterator 遍历键值对(最常用)
这是最推荐的方式,既能访问 key,也能访问 value,且性能好、类型安全。
说明:HashMap 的 entrySet() 返回一个 Set,这个 Set 支持迭代器。
示例代码:
HashMap<string integer> map = new HashMap();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", 35);
Iterator<map.entry integer>> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<string integer> entry = iter.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + " → " + value);
}
</string></map.entry></string>
用 keySet() + Iterator 遍历所有键
适合只需要 key 的场景,后续如需 value,可再调用 map.get(key),但注意可能触发额外哈希查找。
- 比
entrySet()多一次查找开销,小数据量影响不大,高频调用时建议优先选 entrySet - 适用于需要先处理 key(比如过滤、排序),再按需取值的逻辑
示例:
Iterator<string> keyIter = map.keySet().iterator();
while (keyIter.hasNext()) {
String key = keyIter.next();
System.out.println("Key: " + key + ", Value: " + map.get(key));
}
</string>
用 values() + Iterator 遍历所有值
当只关心 value,完全不需要 key 时使用。返回的是 Collection,也支持迭代器。
- 无法反查对应 key,也不保证顺序(除非用 LinkedHashMap)
- 适合统计、聚合等纯值操作,例如求最大值、求和
示例:
Iterator<integer> valIter = map.values().iterator();
while (valIter.hasNext()) {
System.out.println("Value: " + valIter.next());
}
</integer>
注意事项与常见问题
使用迭代器遍历时需注意:
-
线程不安全:HashMap 本身非线程安全,遍历中若其他线程修改结构(add/remove),会抛
ConcurrentModificationException -
避免在遍历中直接调用 map.remove():应使用迭代器自身的
remove()方法安全删除当前项 -
泛型别省略:务必声明完整泛型类型(如
Iterator),否则编译警告或运行时类型错误> -
增强 for 循环本质也是迭代器:for-each 写法(
for (Map.Entry)底层由迭代器实现,更简洁,但自定义控制(如条件跳过、手动 remove)仍需显式 Iteratore : map.entrySet())
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











