同時変更例外
コレクションを処理する場合、反復子の実行中にコレクションが変更されたことを示す ConcurrentModificationException が発生することがあります。使用。これは、特にコード内に明らかな同時実行性が見られない場合、デバッグする際に混乱を招くエラーになる可能性があります。
次の例を考えてみましょう。
import java.util.*; public class SomeClass { public static void main(String[] args) { List<String> s = new ArrayList<>(); ListIterator<String> it = s.listIterator(); for (String a : args) s.add(a); if (it.hasNext()) String item = it.next(); System.out.println(s); } }
このコードでは、ConcurrentModificationException は次のとおりです。イテレータは作成されているがまだ作成されていない間に、リスト s が要素を追加する (s.add() を使用する) ことによって変更されるためスローされます。
この問題を解決するには、リストが完全に設定された後で反復子を作成する必要があります。コードの修正バージョンは次のとおりです。
import java.util.*; public class SomeClass { public static void main(String[] args) { List<String> s = new ArrayList<>(); for (String a : args) s.add(a); ListIterator<String> it = s.listIterator(); if (it.hasNext()) { String item = it.next(); } System.out.println(s); } }
この変更により、コレクションが完全に変更された後に反復子が作成され、使用されるようになり、同時実行の問題が回避されます。
以上がコレクションを反復処理するときに ConcurrentModificationException を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。