首页 > Java > java教程 > Android 迭代过程中添加 ArrayList 时如何避免 ConcurrentModificationException?

Android 迭代过程中添加 ArrayList 时如何避免 ConcurrentModificationException?

Barbara Streisand
发布: 2024-12-03 07:52:09
原创
341 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板