やっていた:
for (Object key : map.keySet())
if (something)
map.remove(key);
ConcurrentModificationException がスローされたので、次のように変更しました。
for (Object key : new ArrayList<Object>(map.keySet()))
if (something)
map.remove(key);
これと、マップを変更するその他のすべての手順は、同期ブロック内にあります。
もっと良い解決策はありますか?
ベストアンサー1
以下は、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();
}
}