ホームページ >Java >&#&チュートリアル >コレクションを反復するときに Java の foreach ループで「remove()」を使用するのが危険なのはなぜですか?

コレクションを反復するときに Java の foreach ループで「remove()」を使用するのが危険なのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-18 04:16:11128ブラウズ

Why is it Dangerous to Use `remove()` in Java's foreach Loop When Iterating Collections?

Java コレクションの反復と削除: foreach ループでのremove() の危険性

Java は、反復処理に便利な foreach ループ構造を提供します。コレクション。ただし、このループを使用して反復中にコレクションから要素を削除しようとする場合は注意が必要です。

foreach ループ内の合法的な削除

foreach ループで反復している間、反復処理されるコレクションは、ループの反復子を介する以外の方法で変更してはなりません。コレクションに対して Remove() を直接呼び出すと、予期しない例外が発生します。

安全な削除に反復子を使用する

反復中に要素を安全に削除するには、次のことが不可欠です。イテレータを使用します。その Remove() メソッドは、予期しない動作を引き起こすことなく、基礎となるコレクションからの削除を処理するように設計されています。

Voici Java コード:

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

同時変更例外

Java のドキュメントに記載されているように、「同時変更に直面すると、反復子はスローによって迅速かつ完全に失敗します」 ConcurrentModificationException。この例外により、イテレータは、後で予期せぬ動作を引き起こすのではなく、問題のある反復中に問題を識別して報告することが保証されます。 foreach ループは、プログラマがアクセスできないイテレータを暗黙的に作成します。この非表示イテレータのため、foreach の反復中に、remove() を使用してコレクションを直接変更すると、予期しない例外が発生する可能性があります。

以上がコレクションを反復するときに Java の foreach ループで「remove()」を使用するのが危険なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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