反復中にコレクションから要素を削除する
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 サイトの他の関連記事を参照してください。