java遍历hashmap推荐优先使用entryset,效率最高;只需key时用keyset,只需value时用values;三者均为原map的视图,非副本,遍历时并发修改会抛concurrentmodificationexception。

Java 中遍历 HashMap 有三种常用方式,分别对应键集(keySet)、值集(values)和键值对集(entrySet)。推荐优先使用 entrySet 遍历,效率最高;若只需键或值,再考虑对应集合。
遍历键集(keySet)
适用于只需要获取所有 key 的场景。返回的是 Set<k></k>,可直接用增强 for 循环或迭代器遍历。
- 调用
map.keySet()获取键的视图集合 - 该集合与原 map 关联,修改它会影响 map(如调用
remove()),但不能添加新 key - 示例:
HashMap<string integer> map = new HashMap();
map.put("a", 1);
map.put("b", 2);
for (String key : map.keySet()) {
System.out.println(key); // 输出: a, b(顺序不保证)
}</string>
遍历值集(values)
适用于只关心 value 的情况。返回 Collection<v></v>,允许重复值,不保证顺序。
-
map.values()返回的是值的“视图”,不是副本 - 可通过
remove()删除对应 entry,但不能add() - 示例:
for (Integer value : map.values()) {
System.out.println(value); // 输出: 1, 2
}
遍历键值对集(entrySet)——最推荐
这是性能最优、最常用的遍历方式,尤其适合需要同时访问 key 和 value 的场景。避免了通过 key 多次查 value 的开销。
- 返回
Set<map.entry>></map.entry>,每个元素是Map.Entry对象 - 可用
entry.getKey()和entry.getValue()分别获取 - Java 8+ 可结合 lambda 使用
forEach:
map.entrySet().forEach(entry ->
System.out.println(entry.getKey() + "=" + entry.getValue())
);
// 或传统 for 循环:
for (Map.Entry<string integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " → " + entry.getValue());
}</string>
注意事项
所有三种遍历方式返回的都是原 map 的“视图”(view),不是独立副本。遍历时若并发修改 map(非迭代器自身的 remove()),会抛出 ConcurrentModificationException。如需线程安全遍历,应使用 ConcurrentHashMap 或加锁控制。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











