当前位置: 首页 > 面试题库 >

为什么会出现java.util.ConcurrentModificationException?

益和雅
2023-03-14
问题内容

当我运行以下代码时:

    import java.util.LinkedList;

    class Tester {
      public static void main(String args[]) {
        LinkedList<String> list = new LinkedList<String>();
        list.add(new String("suhail"));
        list.add(new String("gupta"));
        list.add(new String("ghazal"));
        list.add(new String("poetry"));
        list.add(new String("music"));
        list.add(new String("art"));

        try {
            for(String s : list) {
            list.add(0,"art");
            list.remove(6);
            System.out.println(list);
        }
        }catch(Exception exc) {
            exc.printStackTrace();
        }

    }
}

我得到一个异常说:

java.util.ConcurrentModificationException
    at java.util.LinkedList$ListItr.checkForComodification(Unknown Source)
    at java.util.LinkedList$ListItr.next(Unknown Source)
    at Tester.main(Tester.java:14)

为什么会出现此异常?

编辑:tmpList是一个LinkedList,其每个节点都包含DepConfAttr类型的对象。
我正在基于内存(首先是最高内存)对tmpList进行排序,这是DepConfAttr对象的属性之一。

上面的代码反映了我要通过以下代码实现的目标

int size = tmpList.size();
        int elementBC = 0; // element being checked
        int startIndex = 1;
        for (DepConfAttr dca : tmpList) {
            long maxMem = dca.getMemory(); // Let this be the maximum memory
            for(int i = startIndex ; i < size ; i++) {
                DepConfAttr dcaTmp = tmpList.get(i);
                if(maxMem < dcaTmp.getMemory()) {
                    tmpList.add(elementBC, dcaTmp);
                    tmpList.remove(i+1);
                    maxMem = tmpList.get(elementBC).getMemory();                        
                }
            }
            elementBC++;
            startIndex++;
            size--;
        }

问题答案:

为什么会出现此异常?

您要遍历列表,而不是通过迭代器从列表中删除一个项目。您还需要在迭代列表时将其添加到列表中。

目前尚不清楚您要实现的目标,但是除了并发集合外,尝试这样做总是会遇到异常。

一个常见的解决方法是先创建列表的副本,然后遍历列表,并在需要时修改原始列表。



 类似资料:
  • 错误:第 1 行的解析错误:函数搜索(sour ^ 期望“字符串”、“数字”、“空”、“真”、“假”、“{”、“[”,得到“未定义” 代码:

  • PWA 是 Progressive Web Apps 的缩写,翻译为渐进式网络应用。早在 2014 年, W3C 就公布过 Service Worker 的相关草案,但是其在生产环境被 Chrome 支持是在 2015 年。因此,如果我们把 PWA 的关键技术之一 Service Worker 的出现作为 PWA 的诞生时间,那就应该是 2015 年。在关注 PWA 是什么之前,先来了解一下为什么

  • 我实现了以下REST调用: 也是一个提供和使用application/x-protobuf的提供者类: 我的pom。xml看起来像: 我的小部件。原型: 选项java_package=“example”;选项java\u outer\u classname=“WidgetsProtoc”; 对于http://localhost:8080/RESTfulExample/widgets我得到以下错误消

  • 问题内容: 我已经阅读了 为什么在尝试在数据库中加载Blob时会出现java.lang.AbstractMethodError?,下载了我能找到的所有11g jdbc驱动程序,并将它们作为库和/或jar文件添加到了我的NetBeans应用程序中。我仍然不断收到相同的AbstractMethodError,这让我很生气!任何指导将不胜感激! 错误信息: 问题答案: 问题的原因是软件不兼容(jar文件

  • 我得到一个当我运行我的Java应用程序。典型的原因是什么?

  • 问题内容: 我正进入(状态 : 当我尝试运行以下 (尽管不完整) 代码段时: 在如下所示: 我正在尝试和班级之间建立联系。 发生此异常的原因是什么? 我创建了两个表并使用以下sql命令: POJO 人 地址 问题答案: 对于多对多关系交换,您需要专用的映射表 6.2.4。价值和多对多关联的集合 即,您需要类似PersonAddress表的内容 其中p_id是对人员表的FK引用,而a_id是对地址表