猿问

迭代并从地图中删除

迭代并从地图中删除

我在做:

for (Object key : map.keySet())
    if (something)
        map.remove(key);

它引发了一个ConcurrentModificationException,所以我将其更改为:

for (Object key : new ArrayList<Object>(map.keySet()))
    if (something)
        map.remove(key);

这个,以及修改地图的任何其他过程都在同步块中。

有更好的解决方案吗?

如果没有人想出一个更好的解决方案,首先要说没有得到勾号;)


UYOU
浏览 321回答 3
3回答

元芳怎么了

从Java 8开始,您可以按如下方式执行此操作:map.entrySet().removeIf(e&nbsp;->&nbsp;<boolean&nbsp;expression>);

慕斯709654

下面是一个代码示例,它在for循环中使用迭代器来删除条目。Map<String,&nbsp;String>&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap<String,&nbsp;String>()&nbsp;{ &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;put("test",&nbsp;"test123"); &nbsp;&nbsp;&nbsp;&nbsp;put("test2",&nbsp;"test456"); &nbsp;&nbsp;}};for(Iterator<Map.Entry<String,&nbsp;String>>&nbsp;it&nbsp;=&nbsp;map.entrySet().iterator();&nbsp;it.hasNext();&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;Map.Entry<String,&nbsp;String>&nbsp;entry&nbsp;=&nbsp;it.next(); &nbsp;&nbsp;&nbsp;&nbsp;if(entry.getKey().equals("test"))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it.remove(); &nbsp;&nbsp;&nbsp;&nbsp;}}

临摹微笑

使用真正的迭代器。Iterator<Object>&nbsp;it&nbsp;=&nbsp;map.keySet().iterator();while&nbsp;(it.hasNext()){ &nbsp;&nbsp;it.next(); &nbsp;&nbsp;if&nbsp;(something) &nbsp;&nbsp;&nbsp;&nbsp;it.remove(); &nbsp;}实际上,您可能需要迭代entrySet()而不是keySet()使其工作。
随时随地看视频慕课网APP

相关分类

Java
我要回答