ホームページ >Java >&#&チュートリアル >反復中に Java コレクションから要素を安全に削除するにはどうすればよいですか?
Java での反復中の要素の安全な削除
Q: foreach ループを使用して反復中にコレクションから要素を削除することは許可されますか? Java では?
A: 削除には foreach ループを使用します。お勧めできません。 基礎となるイテレータが公開されておらず、変更のために直接アクセスできないため、予期しない動作が発生する可能性があります。
例:
List<String> names = .... for (String name : names) { // Do something names.remove(name). }
このコードは Java では失敗する可能性があります。 foreach ループの進行中に、削除操作によってその下にあるコレクションが変更されるため、util.ConcurrentModificationException が発生します。
Q: 次の項目を削除できますか?まだ反復処理されていませんか?
A: いいえ。 ループ内でまだ処理されていない要素を削除すると、「インデックスが範囲外」エラーが発生する可能性があります。例:
//Assume that the names list as duplicate entries List<String> names = .... for (String name : names) { // Do something while (names.remove(name)); }
反復中に要素を安全に削除するには、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 のドキュメントでは、iterator メソッドと listIterator メソッドによって返される反復子は「失敗」であると強調されています。速い。"イテレータの削除メソッドまたは追加メソッドの外側でリストに構造を変更すると、ConcurrentModificationException が発生します。
以上が反復中に Java コレクションから要素を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。