1

使用下面的代码片段,我正在尝试处理电子表格,但需要排除临时列。我知道我这样做的粗略方式,将异常放在 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) {...
4

4 回答 4

4

Iterable一旦在其上创建了迭代器(除了通过迭代器),您就不能更改它的内容,否则您将在移动迭代器时立即获得 ConcurrentModificationException - 您创建一个迭代器,然后执行noProcess.add(new Integer("5"));,然后再前进迭代器。

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

于 2011-07-22T13:49:49.207 回答
1

JavaDoc

ConcurrentModificationException:当这种修改是不允许的时,检测到对象的并发修改的方法可能会抛出此异常。

例如 ,通常不允许一个线程在另一个线程对其进行迭代时修改 Collection。

于 2011-07-22T13:51:41.257 回答
1

来自 Java 文档:

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

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

于 2011-07-22T13:57:33.983 回答
0

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

于 2011-07-22T13:52:24.483 回答