这行代码是 Java 中用于遍历 Map
集合的标准方式:
for (Map.Entry entry : oldMap.entrySet())
oldMap.entrySet()
Map
中所有键值对的 Set
集合Set>
(每个元素都是键值对对象)Map.Entry entry
Map.Entry
是一个表示单个键值对的接口getKey()
:获取键getValue()
:获取值:
(冒号)
for (Map.Entry entry : map.entrySet()) {
String key = entry.getKey(); // 获取当前键
Integer value = entry.getValue(); // 获取当前值
// 对键值对进行业务处理...
}
等价于传统迭代器写法:
Iterator> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = it.next();
// 处理 entry...
}
Map scores = new HashMap<>();
scores.put("Alice", 90);
scores.put("Bob", 85);
// 遍历所有键值对
for (Map.Entry entry : scores.entrySet()) {
System.out.println("学生: " + entry.getKey()
+ ", 分数: " + entry.getValue());
}
输出:
学生: Alice, 分数: 90
学生: Bob, 分数: 85
Map map = new HashMap<>();
map.put("oldKey", 100);
// 1. 创建临时集合存储需要修改的键值对
List> toUpdate = new ArrayList<>();
// 2. 收集目标键值对
for (Map.Entry entry : map.entrySet()) {
if ("oldKey".equals(entry.getKey())) {
toUpdate.add(entry);
}
}
// 3. 修改键(通过创建新键值对)
for (Map.Entry entry : toUpdate) {
map.put("newKey", entry.getValue()); // 添加新键
map.remove(entry.getKey()); // 移除旧键
}
高效性:entrySet()
在遍历时比分开调用 keySet()
+ get()
更高效
(减少哈希计算次数)
原子操作:同时访问键值对,保证遍历时数据一致性
类型安全:使用泛型(如 Map.Entry
)避免类型转换
注意:直接修改
Entry
对象(如entry.setKey()
)在标准 Java Map 实现中是不允许的(会抛出UnsupportedOperationException
)。正确做法是通过map.put(newKey, value)
和map.remove(oldKey)
实现键的替换。