Java中不能直接用Iterator遍历HashMap,需通过entrySet()、keySet()或values()获取可迭代集合;推荐entrySet()+Iterator遍历键值对,高效且直接获取Map.Entry;keySet()+Iterator适合仅需键的场景,但get()查值性能较低;values()+Iterator仅遍历值;遍历时不可用map.put()/remove()修改结构,否则抛ConcurrentModificationException。

Java 中不能直接用 Iterator 遍历 HashMap 本身,因为 HashMap 不是 Iterable 接口的实现类;但可以通过它的 entrySet()、keySet() 或 values() 方法获取可迭代的集合,再用 Iterator 遍历键值对。
用 entrySet() + Iterator 遍历键值对(推荐)
这是最常用、最高效的方式,直接获取 Map.Entry 的集合,每个元素都包含 key 和 value。
<font color="#888">Map<string integer> map = new HashMap();<br>map.put("Alice", 25);<br>map.put("Bob", 30);<br><br>Iterator<map.entry integer>> iterator = map.entrySet().iterator();<br>while (iterator.hasNext()) {<br> Map.Entry<string integer> entry = iterator.next();<br> String key = entry.getKey();<br> Integer value = entry.getValue();<br> System.out.println(key + " -> " + value);<br>}</string></map.entry></string></font>
用 keySet() + Iterator 遍历键,再通过 get() 获取值
适合只需要 key、偶尔查 value 的场景;但注意:如果 value 是 null,无法区分是 key 不存在还是值为 null,且多一次哈希查找,性能略低。
- 先用
keySet().iterator()获取 key 的迭代器 - 每次调用
map.get(key)拿 value(不推荐高频使用)
用 values() + Iterator 只遍历值
如果只关心 value,不涉及 key,可用这个方式,但无法反向知道对应 key 是什么:
<font color="#888">Iterator<integer> valueIterator = map.values().iterator();<br>while (valueIterator.hasNext()) {<br> System.out.println(valueIterator.next());<br>}</integer></font>
注意事项
-
遍历时不要用 map.put()/remove() 修改结构,否则会抛
ConcurrentModificationException(除非用Iterator.remove()安全删除) -
entrySet()返回的是视图,修改 entry 的 value(如entry.setValue(newVal))会同步更新原 map;但不能用entry.setKey()(该方法不存在) - JDK 8+ 更简洁写法是用
forEach()或增强 for 循环,但题目明确要求Iterator,所以以上写法更贴切
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











