ConcurrentModificationException的

我正在使用下面的代码片段,尝试处理电子表格,需要排除ad hoc列。 我知道我正在做的粗略方式,将exception放在ArrayList中并处理每个列表中的列表并且在当前行列上的增量是不正常的,但是你知道只是完成它。

但是我得到了标题错误,我认为这应该永远不会发生。 我只是循环遍历ArrayList并进行比较,而不是修改任何东西。 错误在哪里? 有没有更好的方法来处理例外列表?

ArrayList noProcess = new ArrayList(); Iterator itr00 = noProcess.iterator(); Iterator itr01 = noProcess.iterator(); noProcess.add(new Integer("5")); noProcess.add(new Integer("18")); .... boolean include=true; for(int i=0;i<archive.length;i++){ for (int j = 0; j < archive[i].length; j++) { while (itr00.hasNext()) { if (j == ( (Integer) itr00.next()).intValue()) include = false; } if (include) {... 

一旦在其上创建迭代器(除了通过迭代器),你就无法改变Iterable的内容,否则只要你移动迭代器就会得到一个ConcurrentModificationException – 你创建一个迭代器,然后执行noProcess.add(new Integer("5")); ,然后推进迭代器。

另外,你创建了两个迭代器 – 你也不应该这样做 – 这很疯狂。

来自JavaDoc ,

ConcurrentModificationException :当不允许此类修改时,检测到并发修改对象的方法可能抛出此exception。

例如,一个线程修改Collection而另一个线程迭代它时通常不允许。

来自Java Docs:

这个类的iterator和listIterator方法返回的迭代器是快速失败的:如果在创建迭代器之后的任何时候对列表进行结构修改,除了通过迭代器自己的remove或add方法之外,迭代器将抛出ConcurrentModificationException。 因此,在并发修改的情况下,迭代器快速而干净地失败,而不是在未来的未确定时间冒任意,非确定性行为的风险。

使用迭代器的add方法将元素添加到List中

在获取迭代器后添加列表中的记录,更正..它应该工作。