ホームページ >Java >&#&チュートリアル >ArrayList を反復および変更するときに ConcurrentModificationException を回避するにはどうすればよいですか?

ArrayList を反復および変更するときに ConcurrentModificationException を回避するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 08:21:28799ブラウズ

How to Avoid a ConcurrentModificationException When Iterating and Modifying an ArrayList?

ConcurrentModificationException は、ArrayList の走査 (反復処理) と変更が同時に行われるときに発生します。この記事では、この例外を処理するためのベスト プラクティスを検討し、代替アプローチの概要を説明します。

同時変更例外の回避

例外の発生を防ぐには、次の 2 つのオプションを使用できます。

  1. 削除する値のリストを作成する: 反復中に、削除する必要がある値を別のリストに追加します。反復が完了したら、元のリストで "removeAll" メソッドを呼び出します。
  2. Iterator の Remove メソッドを使用します: ループ内で ArrayList を直接変更する代わりに、"remove" メソッドを使用します。イテレータ自体の。これには、拡張された for ループの代わりに従来の for ループを使用する必要があります。

イテレータの Remove メソッドの例:

ある長さの文字列を削除するシナリオを考えてみましょう。 ArrayList からの 5 より大きい値:

<code class="java">List<String> list = new ArrayList<>();
...
for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
    String value = iterator.next();
    if (value.length() > 5) {
        iterator.remove();
    }
}</code>

この例では、反復子の「remove」メソッドを使用して、反復処理中に元のリストを安全に変更します。

以上がArrayList を反復および変更するときに ConcurrentModificationException を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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