迭代并从地图中删除我在做:for (Object key : map.keySet())
if (something)
map.remove(key);它引发了一个ConcurrentModificationException,所以我将其更改为:for (Object key : new ArrayList<Object>(map.keySet()))
if (something)
map.remove(key);这个,以及修改地图的任何其他过程都在同步块中。有更好的解决方案吗?如果没有人想出一个更好的解决方案,首先要说没有得到勾号;)
3 回答

元芳怎么了
TA贡献1798条经验 获得超7个赞
从Java 8开始,您可以按如下方式执行此操作:
map.entrySet().removeIf(e -> <boolean expression>);

慕斯709654
TA贡献1840条经验 获得超5个赞
下面是一个代码示例,它在for循环中使用迭代器来删除条目。
Map<String, String> map = new HashMap<String, String>() { { put("test", "test123"); put("test2", "test456"); }};for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); ) { Map.Entry<String, String> entry = it.next(); if(entry.getKey().equals("test")) { it.remove(); }}

临摹微笑
TA贡献1982条经验 获得超2个赞
使用真正的迭代器。
Iterator<Object> it = map.keySet().iterator();while (it.hasNext()){ it.next(); if (something) it.remove(); }
实际上,您可能需要迭代entrySet()
而不是keySet()
使其工作。
添加回答
举报
0/150
提交
取消