栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在迭代时删除和添加元素到TreeMap?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在迭代时删除和添加元素到TreeMap?

解释原因

ConcurrentModificationException

map.remove(k);map.put(x, value);

for-
each循环也在内部创建的迭代器

entrySet
map
。在遍历map时,您已经通过将值再次放入map(
map.put(x,value)
)来修改了map的结构,这会导致这种情况
ConcurrentModificationException

甚至在文档中也对此做了很好的解释-

此类的所有“集合视图方法”返回的迭代器都是快速失败的:如果在创建迭代器后的任何时间对结构进行结构修改,则除了通过迭代器自己的remove方法之外,该迭代器都将抛出ConcurrentModificationException
。因此,面对并发修改,迭代器将快速而干净地失败,而不是冒着在未来不确定的时间冒任意,不确定的行为的风险。

如何解决 -

您必须在迭代时更改此映射的结构更改,以后可以插入此值,例如保留临时映射,并在迭代完成后将其添加到主映射中。

Map<Long, Integer> tempMap = new HashMap<>();for (Map.Entry<Long, Integer> e : map.entrySet()){    map.remove(k);    tempMap.put(x, value);}map.putAll(tempMap);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号