首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >concurrentModificationException

concurrentModificationException
EN

Stack Overflow用户
提问于 2011-07-22 21:40:13
回答 4查看 1.1K关注 0票数 1

使用下面的代码片段,我正在尝试处理电子表格,同时需要排除即席列。我知道我做这件事的粗糙方式,把异常放在一个ArrayList中,并在当前行列上处理每个并且不断递增的列表是不合理的,但你知道只要把它完成就行了。

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

代码语言:javascript
复制
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) {...
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-22 21:49:49

一旦创建了迭代器(除了通过迭代器),就不能更改Iterable的内容,否则只要移动迭代器,就会得到一个ConcurrentModificationException -先创建迭代器,然后执行noProcess.add(new Integer("5"));,然后前进迭代器。

此外,您还创建了两个迭代器-您也不应该这样做-这太疯狂了。

票数 4
EN

Stack Overflow用户

发布于 2011-07-22 21:51:41

JavaDoc

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

例如,当一个线程对集合进行迭代时,通常不允许另一个线程修改该集合。

票数 1
EN

Stack Overflow用户

发布于 2011-07-22 21:57:34

在Java文档中:

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

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

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

https://stackoverflow.com/questions/6790856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档