java - 为什么在迭代 HashMap 时在 IF 块中添加元素会起作用?
问题描述
为什么在IF
使用迭代器迭代块时将元素添加到 HashMap 中可以在块内工作?
HashMap<Integer, Integer> map = new HashMap<>();
map.put(1, 1);
map.put(2, 2);
map.put(3,3);
Iterator<Integer> it = map.keySet().iterator();
while(it.hasNext()) {
Integer key = it.next();
System.out.println("Map Value:" + map.get(key));
if (key.equals(2)) {
map.put(1, 4); // Works, Why?
}
//map.put(5, 5); // ConcurrentModificationException, as expected
}
请指出任何重复项,如果有,我将删除此问题。
解决方案
如果您添加一个新键以使地图的大小更大,那么您只是在地图内部更新键的值1
。因此,您正在修改大小并且迭代器失败。if
5
一般而言:如果您想比较一个调用有效而另一个无效的原因,请确保您使用的是具有相同参数的完全相同的调用。所以map.put(1,4)
将在 if 之外工作。
推荐阅读
- java - 如何确定在 recycelview 布局上单击了哪个卡片视图?
- svelte - 没有变化的苗条更新总是触发重新渲染
- python - 在 Django 中向特定用户显示私人内容
- system-verilog - 我无法编译 .sv 文件 (SystemVerilog)
- sql - 如何在 COPY 命令上添加文件的缺失值
- admob - 任何人都可以解释激励广告格式的具体政策
- python - 硒解析 https://myip.ms
- python - 使用随机森林进行多分类 - 如何衡量结果的“稳定性”
- pytorch - 在 Pytorch 中,当传输到 GPU 时,我收到一个错误“在 CPU 上,但应该在 GPU 上”
- android - Frida "invoke-virtual" 方法重载失败并显示 "Error: expected a pointer"