我在做:
for (Object key : map.keySet()) if (something) map.remove(key);
这引发了ConcurrentModificationException,所以我将其更改为:
for (Object key : new ArrayList<Object>(map.keySet())) if (something) map.remove(key);
此操作以及任何其他修改映射的过程都在同步块中。
有更好的解决方案吗?
如果没有人提出更好的解决方案,那么首先要说“没有”
从Java 8开始,你可以执行以下操作:
map.entrySet().removeIf(e -> <boolean expression>);
这是在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(); } }