反復および削除中の同時変更例外
同時変更 (要素の削除など) を実行しながら HashMap を反復すると、ConcurrentModificationException が発生する場合があります。起こる。これは、マップへのイテレータの内部参照が変更によって無効になるためです。
ArrayList による初期解決策
この例外を回避する一般的なアプローチの 1 つは、コピーを作成することです。 new ArrayList<>(map.keySet()) を使用してマップのキー セットを取得します。ただし、このアプローチではキーの不要なコピーが作成され、非効率的になる可能性があります。
削除にイテレータを使用する
より効率的な解決策は、マップのエントリを反復処理することです。イテレータを使用すると、要素を安全に削除できます。マップのentrySet()メソッドは、そのエントリのセットを返します。各エントリにはgetKey()メソッドとgetValue()メソッドがあります。
コード例:
Map<String, String> map = new HashMap<>(); map.put("test", "test123"); map.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(); } }
この例では、マップのエントリを反復処理し、「test」キーを安全に削除します。イテレータは、マップの内部構造に対する必要な変更を処理し、ConcurrentModificationException.
の発生を防ぎます。以上が反復中に HashMap から要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。