反復中にマップから要素を安全に削除するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-17 01:46:03
オリジナル
570 人が閲覧しました

How to Safely Remove Elements from a Map During Iteration?

マップの要素の反復と削除: 同時変更例外の解決

マップの反復とその要素の削除により、ConcurrentModificationException が発生する可能性があります。この例外は、反復中に Java コレクションが変更され、反復子と基礎となるコレクションの間に非同期状態が生じると発生します。

この例外を回避するための一般的なアプローチの 1 つは、セットのコピーを作成することです。反復する前にキーの数を確認します。コードでは、次の行でこれを実現します。

for (Object key : new ArrayList<Object>(map.keySet()))
ログイン後にコピー

このアプローチは効果的ですが、より効率的な解決策がある可能性があります。

イテレータを使用してエントリを削除する

Java Collections Framework は、反復中に要素を安全に削除できる反復子を提供します。次のコード サンプルは、イテレータを使用してキー「test」を持つエントリをマップから削除する方法を示しています。

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();
    }
}
ログイン後にコピー

このソリューションでは、イテレータのremove() メソッドを使用して、現在のエントリをマップから安全に削除します。地図。このアプローチにより、キー セットの別のコピーを作成する必要がなくなり、特に大規模なマップの場合、一般的により効率的になります。

以上が反復中にマップから要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート