ホームページ >Java >&#&チュートリアル >反復中に Java コレクションから要素を安全に削除するにはどうすればよいですか?

反復中に Java コレクションから要素を安全に削除するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-21 01:02:13178ブラウズ

How to Safely Remove Elements from a Java Collection While Iterating?

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 サイトの他の関連記事を参照してください。

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