Map.Entry用于遍历Map的键值对,常用entrySet()配合增强for循环高效访问key和value;需删除元素时应使用Iterator避免ConcurrentModificationException;Java 8可用forEach结合Lambda简化代码;仅遍历键或值时可选用keySet()或values()以提升性能。

在Java中,Map.Entry 是 Map 接口的一个内部接口,用来表示映射中的一对键值对(key-value pair)。通过它,我们可以方便地遍历 Map 集合中的每一个元素。以下是几种常见的使用 Map.Entry 遍历映射集合的方法和技巧。
1. 使用 entrySet() 配合增强for循环
这是最常用、效率较高的遍历方式。调用 map.entrySet() 获取包含所有键值对的 Set 集合,然后通过增强for循环遍历每个 Map.Entry 对象。
示例代码:
Mapmap = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); for (Map.Entry entry : map.entrySet()) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); }
这种方式既能访问 key,也能访问 value,适合大多数场景。
立即学习“Java免费学习笔记(深入)”;
2. 使用 Iterator 遍历 entrySet
如果需要在遍历过程中安全地删除元素,推荐使用 Iterator。
Iterator> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); if ("banana".equals(entry.getKey())) { iterator.remove(); // 安全删除 } System.out.println(entry.getKey() + " = " + entry.getValue()); }
注意:直接在 for-each 中调用 map.remove() 会抛出 ConcurrentModificationException,而使用 Iterator 的 remove() 方法是安全的。
3. 结合 Lambda 表达式遍历(Java 8+)
Java 8 引入了 forEach 方法,结合 Lambda 可以让代码更简洁。
map.forEach((key, value) -> {
System.out.println("Key: " + key + ", Value: " + value);
});
虽然没有显式使用 Map.Entry,但其底层仍基于 Entry 遍历机制,语法更现代、清晰。
4. 只遍历键或值时的优化选择
如果只需要 key,可以用 keySet();只需 value 时用 values()。
- 只遍历键:for (String key : map.keySet())
- 只遍历值:for (Integer value : map.values())
但如果同时需要 key 和 value,优先使用 entrySet(),避免多次查找提升性能。
基本上就这些。合理使用 Map.Entry 能让映射遍历更高效、代码更清晰。关键是根据需求选择合适的方式,尤其注意遍历时的删除操作要使用 Iterator。不复杂但容易忽略细节。










