Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ConcurrentModificationException in ArrayList<Object>

ConcurrentModificationException in ArrayList<Object>
EN

Stack Overflow用户
提问于 2014-11-19 22:18:22
回答 4查看 100关注 0票数 1

我理解这个异常的发生是因为我在迭代一个列表时试图修改一个列表,但是我不知道如何绕过它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    for(Villager e : tasked)
    {
        if(!e.hasTask())
        {
            tasked.remove(e);
        }
    }

代码是很清楚的。如果村民"e“没有任务,则应将其从此列表中删除。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-11-19 22:20:26

使用ListIterator,它允许您对正在迭代的列表进行更改。

您使用的代码是迭代器的在使用中几乎是惰性的,但是必须使用迭代器的remove()方法显式地删除元素。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    Iterator itr = tasked.iterator(); 
    while(itr.hasNext()) {
        Villager e = itr.next();
        if(!e.hasTask()) {
           itr.remove();
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2014-11-19 22:25:56

ConcurrentModificationException是一个RuntimeException,如果检测到对象的并发修改是不允许的,这种修改可能会引发这种修改。一个不允许的行为的例子是当一个线程试图修改一个集合的内部结构,而另一个线程正在迭代它。

使用Iterator的删除方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Iterator<Village> villageItr = tasked.iterator();
   while(villageItr.hasNext()){
     Village e=villageItr.next(); 
     if(!e.hasTask()){
            //remove that element from collection
            villageItr.remove();
        }

   }
票数 0
EN

Stack Overflow用户

发布于 2014-11-19 22:26:06

创建单独的列表(例如itemsToRemove),其中包含要删除的所有项目,然后使用tasked.removeAll(itemsToRemoveList)

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   List<Villager> toRemove = new ArrayList();
for(Villager e : tasked)
{
    if(!e.hasTask())
    {
        toRemove.add(e);
    }
}
tasked.removeAll(toRemove);

这种方法的唯一问题是,如果“toRemove”列表大小非常大,则可以执行相反的“ls.retainAll(C)”操作,只需确定要保留的内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27033028

复制
相关文章
Java ArrayList异常-ConcurrentModificationException
在操作List集合的时候,习惯用for each循环操作。这次项目中根据业务逻辑需要删除符合条件的元素,元素删除后,继续next操作,抛出了ConcurrentModificationException异常。下面,重现异常,看看异常是怎么发生的,怎么避免。
用户2146693
2019/08/08
1K0
Java ArrayList异常-ConcurrentModificationException
ConcurrentModificationException
最近在写android程序的过程中,对容器ArrayList操作的时候,碰到了java.util.ConcurrentModificationException异常,是在遍历一个容器的时候,删除容器里面的元素: public static void exit(){ for (Activity activity : activityList){ activity.finish(); activityList.remove(activity); } } 官方文档中
用户3004328
2018/09/06
6120
执行ArrayList的remove(object)方法抛异常?
然后会发现抛出java.util.ConcurrentModificationException异常,这是一个并发异常。那么这个到底是什么情况?首先需要介绍一下增强for循环
Johnson木木
2020/07/13
8200
HashMap remove ConcurrentModificationException
我们要写个遍历Map集合,删除指定key值的方法,我们估计会这样写。 刚开始我习惯上会写上map.remove(entry.getKey()),remove集合的一个值。但是写了之后,会发现java.util.ConcurrentModificationException异常。
SmileNicky
2022/05/07
8040
java.util.ConcurrentModificationException
最近遇到了这个报错,报错的原因在于调用了ArrayList的sort方法,查看代码之后发现,sort方法也会改变modCount的值。后续需要注意。
2019/12/03
9730
【Java】ConcurrentModificationException梳理
首先看一下一个例子举出 ConcurrentModificationException 的出现场景:
后端码匠
2023/09/02
1860
【Java】ConcurrentModificationException梳理
13.13 java.util.ConcurrentModificationException13.13 java.util.ConcurrentModificationException问题描述原因
在H5性能测试平台系统的开发过程中,客户端调用服务端API,写入性能数据的时候,报了如下错误:
一个会写诗的程序员
2018/08/20
4290
为什么会有ConcurrentModificationException
谁因为当方法检测到对象的并发修改,但不允许这种修改的时候,抛出的此异常 在这里介绍一下快速失败机制
程思扬
2022/01/11
4500
关于Lis和vectort的ConcurrentModificationException
转自:http://sushe1424.iteye.com/blog/1110796
forrestlin
2022/04/02
2930
java.util.ConcurrentModificationException原因
我们要写个遍历Map集合,删除指定key值的方法,我们估计会这样写。 刚开始我习惯上会写上map.remove(entry.getKey()),remove集合的一个值。但是写了之后,会发现java.util.ConcurrentModificationException异常。
SmileNicky
2019/01/17
3.1K0
并发修改异常ConcurrentModificationException详解
在多线程编程中,相信很多小伙伴都遇到过并发修改异常ConcurrentModificationException,本篇文章我们就来讲解并发修改异常的现象以及分析一下它是如何产生的。
终有救赎
2023/10/22
7540
并发修改异常ConcurrentModificationException详解
ConcurrentModificationException异常解决办法
在开发自己的第一款app,在操作存放子弹的ArrayList时,报出java.util.ConcurrentModificationException异常,因为该异常是非捕获型异常而且很少见,所以费了些时间才找到问题所在.查询了很多资料,终于调通了.
全栈程序员站长
2022/07/20
1K0
Iterator在ArrayList中的源码实现
获取迭代器 List<LinkedHashMap> list = new ArrayList<>(); Iterator iterator = list.iterator(); iterator()方法实现 public Iterator<E> iterator() { return new Itr(); } Itr 源码 /** * An optimized version of AbstractList.Itr */ private class Itr imp
小小明童鞋
2018/06/13
1.1K0
集合源码阅读:ArrayList
1.继承关系: public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable =================================================== 2. 属性: // 默认容量 private static fin
微风-- 轻许--
2022/04/13
2390
ArrayList源码分析(基于jdk1.8)(一):源码及基本操作
ArrayList继承了AbstractList类,并实现了List, RandomAccess, Cloneable, java.io.Serializable等接口。其官方描述为 Resizable-array implementation of the List interface。阅读源码doc,如下:
冬天里的懒猫
2020/08/04
3780
ArrayList源码分析(基于jdk1.8)(一):源码及基本操作
【Java入门提高篇】Day21 容器类详解(四)ArrayList源码分析
   今天要介绍的是List接口中最常用的实现类——ArrayList,本篇的源码分析基于JDK8,如果有不一致的地方,可先切换到JDK8后再进行操作。
弗兰克的猫
2018/06/03
7360
【Java入门提高篇】Day21 容器类详解(四)ArrayList源码分析
面试官来了:讲讲快速失败和安全失败的区别?
在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。
后台技术汇
2022/05/28
3480
ArrayList源码学习
重点了解:数组为EMPTY_ELEMENTDATA就走基于用户设置大小值进行1.5倍扩容(这里是空所以是0),数组为默认空DEFAULTCAPACITY_EMPTY_ELEMENTDATA就会走基于默认值的大小10扩容进行1.5倍扩容
晓果冻
2022/09/08
3780
ArrayList源码学习
ArrayList源码解析(3)
细心的同学一定会发现 :以无参数构造方法创建 ArrayList 时,实际上初始化赋值的是一个空数组。当真正对数组进行添加元素操作时,才真正分配容量。即向数组中添加第一个元素时,数组容量扩为 10。下面在我们分析 ArrayList 扩容时会讲到这一点内容!
黑洞代码
2021/01/28
5090
ArrayList源码解析(3)
for-each或迭代器中调用List的remove方法会抛出ConcurrentModificationException的原因
for-each循环遍历的实质是迭代器,使用迭代器的remove方法前必须调用一下next()方法,并且调用一次next()方法后是不允许多次调用remove方法的,为什么呢?接下来一起来看吧
砖业洋__
2023/05/06
2620
for-each或迭代器中调用List的remove方法会抛出ConcurrentModificationException的原因

相似问题

Android:遍历Object ArrayList抛出ConcurrentModificationException

235

concurrentModificationException in ArrayList

40

ArrayList<Object<ArrayList<Object>>>

14

用于ArrayList的ConcurrentModificationException

60

ConcurrentModificationException *修改ArrayList后

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文