当前位置: 首页 > 知识库问答 >
问题:

在0索引处放入HashMap会导致ConcurrentModificationException

卓学智
2023-03-14

我有一个简单的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();
    if (key.equals(2)) {
        map.put(1, 2);
    }
}
if (key.equals(2)) {
    map.put(0, 2); // changed index '1' to '0'
}

如果我删除第三个map元素:

map.put(1, 1);
map.put(2, 2);
// map.put(3, 3);

它工作得很好

共有1个答案

陆卓
2023-03-14

您正在迭代期间更改映射的大小,这会导致异常。请记住,引发异常的不是put操作,而是试图通过迭代器通过iterator#next获取下一个元素

在您的例子中,如果您已经“扩展”了映射,那么迭代器将在next()上抛出异常。但是,如果是在上次迭代中完成的,hasnext返回false。这将导致跳过next()调用,并且不会引发异常。

 类似资料:
  • 问题内容: 我建立了一个由Hashmap中定义的nameValue对组成的json对象 我遇到的问题是当我调用时: 它像这样添加nameValue对: 代替 有什么想法吗? 谢谢 问题答案: 遍历HashMap并放入jsonObject:

  • D3库中所有函数都在“d3”命名空间内。 D3 使用语义版本命名。 你可以使用“d3.version”查看D3的最新版本 D3 API总览 行为 - 可重用的交互行为。 核心 - 包括选择器,过渡,数据处理,本地化,颜色等。 地理 - 球面坐标,经纬度运算。 几何 - 提供绘制2D几何图形的实用工具。 布局 - 推导定位元素的辅助数据。 比例尺 - 数据编码和视觉编码之间转换。 可缩放矢量图形 -

  • 我有一条sql ,不知道为什么会导致索引失效 当我注释掉 select 后面的 pc.name 字段就可以使用索引。 不知道为什么,有没有大佬给我解惑一下。 测试环境中dev_device_log表中只有几百条数据的时候可以走索引,但是我从生产环境随意导出了几万条数据后就无法使用索引了。 不太理解为什么select 后面的字段会影响到索引情况 表结构: 我导出了一份几万条脱敏后的数据,但是不知道怎

  • 我目前正在通过webpack/babel在React应用程序中使用ES6。我使用索引文件收集模块的所有组件并将其导出。不幸的是,这看起来是这样的: 所以我可以很好地从其他地方导入它,比如: 显然,这不是一个很好的解决方案,所以我想知道,是否还有其他方法。我似乎无法直接导出导入的组件。

  • 问题内容: 在放入HashMap期间发生冲突时,是否会调整地图大小或将条目添加到该特定存储桶中的列表中? 问题答案: 当您说“冲突”时,您是指相同的哈希码吗?哈希码用于确定要使用HashMap中的哪个存储桶,并且该存储桶由具有相同哈希码的所有条目的链表组成。然后在返回或引导(获取/放入)之前比较条目的相等性(使用.equals())。 请注意,这是专门用于HashMap的(因为这是您所要求的),而

  • 我在上Java初学者课。我只懂基本的Java。我们刚刚开始多态性和继承。我的问题是将对象放入数组。我有一个由十个对象组成的数组,如下所示。 假设我想将索引处的对象放入索引,索引处的对象是否会转到索引?还是将索引处的对象从数组中删除?如果它被删除了,当我把一个对象放在一个不同的数组索引中时,我该怎么做?这些对象只是在数组中交换位置?