マップを反復処理して削除する [重複] 質問する

マップを反復処理して削除する [重複] 質問する

やっていた:

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();
    }
}

おすすめ記事