首頁 >Java >java教程 >Android 迭代過程中加入 ArrayList 時如何避免 ConcurrentModificationException?

Android 迭代過程中加入 ArrayList 時如何避免 ConcurrentModificationException?

Barbara Streisand
Barbara Streisand原創
2024-12-03 07:52:09259瀏覽

How to Avoid ConcurrentModificationException When Adding to an ArrayList During Iteration in Android?

在 Android 中加入 ArrayList 時出現 ConcurrentModificationException

對正在迭代的清單進行修改時通常會遇到 ConcurrentModificationException。此異常可能在多種情況下出現,其中之一是使用迭代器變更 ArrayList 時。

在提供的程式碼片段中,當向mElements ArrayList 新增元素時,在OnTouchEvent 事件期間會出現此問題:

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

    // ...

    if(element.cFlag){
        mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
        element.cFlag = false;
    }
}

拋出ConcurrentModificationException 是因為列表在使用迭代時被修改(透過添加元素)迭代器。

為了解決這個問題,建議使用單獨的List 來儲存迭代過程中需要添加的元素:

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

    // ...

    if (element.cFlag) {
        // Instead of adding elements directly to mElements, add them to thingsToBeAdded
        thingsToBeAdded.add(new Element("crack", getResources(), (int) touchX, (int) touchY));
        element.cFlag = false;
    }
}
mElements.addAll(thingsToBeAdded);

透過使用這種方法,修改為原始列表可以推遲到迭代元素之後,從而避免ConcurrentModificationException。

以上是Android 迭代過程中加入 ArrayList 時如何避免 ConcurrentModificationException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn