マップの要素の反復と削除: 同時変更例外の解決
マップの反復とその要素の削除により、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 サイトの他の関連記事を参照してください。