ホームページ >Java >&#&チュートリアル >Java の For-Each ループ中の要素の削除は安全ですか?また、それを正しく実行するにはどうすればよいですか?

Java の For-Each ループ中の要素の削除は安全ですか?また、それを正しく実行するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-28 12:54:09561ブラウズ

Is Removing Elements During a Java For-Each Loop Safe, and How Can It Be Done Correctly?

反復中にコレクションから要素を削除する

Java では、foreach ループを使用して反復中にコレクションの内容を変更すると、予期しないエラーが発生する可能性があります動作と例外。このコンテキストでコレクションから要素を削除することが許されるかどうかという疑問が生じます。

提供された例のように、foreach ループ内の要素を削除することの合法性については、次のとおりです。

List<String> names = ....
for (String name : names) {
   // Do something
   names.remove(name).
}

答えはい の場合、foreach ループ内の要素を削除することは合法です。ただし、要素を削除するとコレクションの反復子が無効になり、ConcurrentModificationException が発生する可能性があることに注意することが重要です。

さらに、(2 番目の例のように) まだ反復されていない項目を削除することは、 許可されません。イテレータの実装は、そのようなシナリオを適切に処理できる場合と、そうでない場合があります。潜在的な問題を回避するには、要素を削除する前に必ずすべての要素を反復処理してください。

安全な削除のためのイテレータの使用

反復中に要素を安全に削除するには、次のようにします。明示的な Iterator オブジェクトを使用することをお勧めします。イテレータは削除プロセスを直接制御し、ループ全体を通じてコレクションが有効なままであることを保証します。

List<String> names = ....
Iterator<String> i = names.iterator();
while (i.hasNext()) {
   String s = i.next(); // must be called before you can call i.remove()
   // Do something
   i.remove();
}

イテレータを使用すると、例外や無効なコレクション状態の危険を冒さずに要素を安全に削除できます。

以上がJava の For-Each ループ中の要素の削除は安全ですか?また、それを正しく実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。