我正在做:
for (Object key : map.keySet())
if (something)
map.remove(key);
它抛出了一个ConcurrentModificationException,所以我把它改为:
for (Object key : new ArrayList<Object>(map.keySet()))
if (something)
map.remove(key);
这个过程以及修改映射的任何其他过程都在同步块中。
有没有更好的解决方案?
下面是一个在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();
}
}