当在Java中迭代一个列表(如ArrayList、LinkedList等)时,如果在迭代过程中修改了列表的内容,就会抛出ConcurrentModificationException异常。这是因为修改列表的操作与迭代器的状态不一致,导致迭代器无法正确地定位到下一个元素。 为了解决这个问题,可以使用以下方法: ...
publicEnext(){checkForComodification();int i=cursor;if(i>=size)thrownewNoSuchElementException();Object[]elementData=ArrayList.this.elementData;if(i>=elementData.length)thrownewConcurrentModificationException();cursor=i+1;return(E)elementData[lastRet=i];}finalvoidcheckForComodification(){if(modCount!=...
thrownewConcurrentModificationException(); } 如果modCount不等于expectedModCount,则抛出ConcurrentModificationException异常。 很显然,此时modCount为1,而expectedModCount为0,因此程序就抛出了ConcurrentModificationException异常。 到这里,想必大家应该明白为何上述代码会抛出ConcurrentModificationException异常了。 关键点就在于:...
}//拿出集合中的下一个元素@SuppressWarnings("unchecked")publicEnext(){//并发修改异常出现根源//ConcurrentModificationException异常就是从这抛出的//当迭代器通过next()方法返回元素之前都会检查集合中的modCount和最初赋值给迭代器的expectedModCount是否相等,如果不等,则抛出并发修改异常checkForComodification();in...
一.ConcurrentModificationException异常出现的原因 先看下面这段代码: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 publicclassTest{publicstaticvoidmain(String[]args){ArrayList<Integer>list=newArrayList<Integer>();list.add(2);Iterator<Integer>iterator=list.iterator();while(iterator.hasNext()){Integer...
其中有一类比较低级但又常见的错误就是ConcurrentModificationException异常。最近了我就写了个这种异常,这个异常通常发生在使用迭代器遍历集合时,同时对集合进行修改,从而导致迭代器检测到集合结构发生变化而抛出异常。在测试环境中可能因为数据量较小或者测试场景不充分未能显现问题,但一旦部署到生产环境,场景增多,并发操作...
Exception in thread “main” java.util.ConcurrentModificationException at java.util.AbstractList Itr.next(Unknown Source) 根本原因 以上都有3种出现异常的情况有一个共同的特点,都是使用Iterator进行遍历,且都是通过ArrayList.remove(Object) 进行删除操作。
remove(); } } } catch (Exception e) { throw new RuntimeException(e); } } 结果确实出现了java.util.ConcurrentModificationException 异常,然后改用迭代器本身对象去remove,iterator.remove( )就安全,没有出现异常。 也就是修改成: // 用迭代器移除,不能调用集合对象移除,以防出现两者结构不一致出现异常 ...
ConcurrentModificationException(Stringmessage,Throwablecause) 使用指定的详细消息和原因构造一个新的异常。 ConcurrentModificationException(Throwablecause) 构造具有指定的原因和详细消息的新异常(cause==null ? null : cause.toString())(它通常包含的类和详细消息cause。
* ConcurrentModificationException: 但方法监测到对象的并发修改,但不允许这种修改时,抛出此异常。 * 产生的原因: * 由于在遍历的过程中不断添加新的元素造成的,迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素,而迭代器都不知道,所以就报错了,这个错叫并发修改异常。