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

ArrayList に追加するときに ConcurrentModificationException を回避するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-29 17:41:11
オリジナル
159 人が閲覧しました

How to Avoid ConcurrentModificationException When Adding to an ArrayList?

同時変更例外: ArrayList への追加

ConcurrentModificationException は、コレクションの反復処理中にコレクションを変更しようとすると発生します。このエラーは、反復子を使用してコレクションをトラバースしているときに要素を追加または削除してコレクションを変更すると発生します。

例外の原因

提供されたコード スニペット内:

for (Iterator<Element> it = mElements.iterator(); it.hasNext();){
    Element element = it.next();

    // Code to check and add new elements
}
ログイン後にコピー

ループ内で、コードは反復処理中に mElements ArrayList に新しい要素を追加しようとします。イテレータを使用します。反復中にコレクションが変更されるため、これにより ConcurrentModificationException がトリガーされます。

解決策 1: 一時リストを使用する

この問題を解決するには、一時リストを使用して、 ArrayList に追加する必要がある新しい要素。反復が終了したら、一時リストの要素を ArrayList に追加できます。

// Create a new list to store any new elements that need to be added
List<Element> thingsToBeAdded = new ArrayList<>();

// Iterate over the mElements list
for (Iterator<Element> it = mElements.iterator(); it.hasNext();) {
    Element element = it.next();

    // Code to check and mark elements for addition (e.g., set cFlag)

    if (element.cFlag) {
        // Add the new element to the temporary list
        thingsToBeAdded.add(new Element("crack", getResources(), (int) touchX, (int) touchY));
        element.cFlag = false;
    }
}

// Add the new elements to the mElements list after finishing the iteration
mElements.addAll(thingsToBeAdded);
ログイン後にコピー

解決策 2: 拡張された For-Each ループを使用する

An別のアプローチは、コレクションを反復するより安全な方法を提供する、拡張された for-each ループを使用することです。拡張された for-each ループは、反復中にコレクションが変更されないように間接抽象化を使用します。

for (Element element : mElements) {
    // Code to check and modify elements (e.g., set cFlag)
}
ログイン後にコピー

この場合、反復後に新しい要素を個別に追加するコードを更新する必要があります。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート