1. ホーム

[解決済み】マップの反復処理とマップからの削除【重複あり

2022-04-15 03:27:47

質問

していたんです。

for (Object key : map.keySet())
    if (something)
        map.remove(key);

で、ConcurrentModificationExceptionがスローされるので、次のように変更しました。

for (Object key : new ArrayList<Object>(map.keySet()))
    if (something)
        map.remove(key);

このプロシージャと、マップを変更する他のプロシージャは、同期ブロックにあります。

は、もっと良い解決策はないのでしょうか?

どのように解決するのか?

Java8では、以下のようにすることができます。

map.entrySet().removeIf(e -> <boolean expression>);

オラクルドキュメント entrySet()

セットはマップにバックアップされているため、マップの変更はセットに反映され、その逆も同様である