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

DDD
リリース: 2024-11-17 08:11:03
オリジナル
824 人が閲覧しました

How to Safely Remove Elements from a HashMap while Iterating?

反復および削除中の同時変更例外

同時変更 (要素の削除など) を実行しながら 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 サイトの他の関連記事を参照してください。

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