Java中Map不能直接用Iterator遍历,需通过entrySet()、keySet()或values()获取视图后迭代;entrySet()最常用高效,遍历时禁用map.put/remove以防ConcurrentModificationException,应使用iterator.remove()安全删除。

Java 中不能直接用 Iterator 遍历 Map 本身,因为 Map 接口没有实现 Iterable,不支持直接 for-each 或 iterator()。但可以通过它的视图(view)获取键、值或键值对的集合,再用 Iterator 遍历。
用 entrySet() + Iterator 遍历键值对
最常用也最高效的方式是调用 map.entrySet().iterator(),返回 Set<map.entry>></map.entry> 的迭代器,每个元素是 Map.Entry 对象,可分别获取 key 和 value:
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + " → " + value);
}
遍历键(keySet)或值(values)的 Iterator
如果只需要键或只需要值,可分别使用 keySet().iterator() 或 values().iterator(),更轻量:
-
map.keySet().iterator()→ 返回Iterator<K>,适合只处理键 -
map.values().iterator()→ 返回Iterator<V>,适合只处理值
注意:避免 ConcurrentModificationException
在用 Iterator 遍历时,**不能通过 map 本身增删元素**(如 put()、remove()),否则会抛出并发修改异常。如需边遍历边删除,请用 Iterator.remove():
立即学习“Java免费学习笔记(深入)”;
- ✅ 正确:
iterator.remove();(安全删除当前项) - ❌ 错误:
map.remove(key);(触发异常)
替代写法:增强 for 循环(本质仍是 Iterator)
for-each 是语法糖,底层仍调用 Iterator,写起来更简洁:
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
它和显式使用 Iterator 在功能和安全性上完全等价。


















