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

リストの反復および変更時に ConcurrentModificationException を回避するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-25 09:02:10732ブラウズ

How to Avoid ConcurrentModificationException When Iterating and Modifying a List?

同時変更例外処理

問題:

反復処理中に同時変更例外が発生する同時変更が存在しないように見える場合でも、リスト

実装:

提供されたコードは、リストとリスト反復子を同時に作成します。次に、反復処理中にリストに要素を追加し、例外が発生します。

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);
    }
}

解決策:

例外を回避するには、コードを次のように変更します。

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

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