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 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);
}
</string></map.entry></string>
遍历键(keySet)或值(values)的 Iterator
如果只需要键或只需要值,可分别使用 keySet().iterator() 或 values().iterator(),更轻量:
-
map.keySet().iterator()→ 返回Iterator<k></k>,适合只处理键 -
map.values().iterator()→ 返回Iterator<v></v>,适合只处理值
注意:避免 ConcurrentModificationException
在用 Iterator 遍历时,**不能通过 map 本身增删元素**(如 put()、remove()),否则会抛出并发修改异常。如需边遍历边删除,请用 Iterator.remove():
- ✅ 正确:
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());
}
</string>
它和显式使用 Iterator 在功能和安全性上完全等价。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











