java - 如何在迭代此集合时避免 ConcurrentModificationException?

标签 java exception collections guava

我需要遍历项目集合,有时还要同时添加到该集合中。但是,如果我在迭代时添加,那么我只是通过打破迭代循环并从头开始重新启动迭代来重新开始迭代。然而,这导致 并发修改异常。 [下面的代码]

    List<Integer> collection = new ArrayList<>();
    for (Integer lobId: collection) {
         ..
         if (someCondition) {
             collection.add(something); 
             break; 
         }
    }

我怎么可能做类似上面的事情来避免 ConcurrentModificationException

简单地使用 Array 而不是 ArrayList 来避免这个异常是否正确? 是否有任何类型的专门集合?

--

编辑:

我不想为此数组列表创建新副本,因为除非完成某些要求,否则我会多次重复整个迭代过程。每次创建一个新副本都会带来一些额外的开销,如果可能的话,我想避免这种情况。

此外,如果可能的话,我想在该集合中维护一个排序顺序和唯一值。有什么可以在任何图书馆使用的东西吗?否则我可以在迭代过程结束时对其进行排序并删除重复项。这对我来说也很好。

最佳答案

使用另一个集合进行添加,并在最后合并它们。

List<Integer> collection = new ArrayList<>();
collection.add(...)
...
List<Integer> tempCollection = new ArrayList<>();    
for (Integer lobId: collection ) {
     ..
     if (someCondition) {
         tempCollection.add(something); 
         break; 
     }
}

collection.addAll(tempCollection);

关于java - 如何在迭代此集合时避免 ConcurrentModificationException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21508058/

相关文章:

java - 将 Jackson for JSON View 与 Spring 2.5 集成

java - Android Kotlin Dagger 2 组件未生成

java - Java 中的新功能 Lambda 重载

python - 从回溯中获取最后一个函数的调用参数?

java - 轻松访问集合中的条目 - 使用 where 条件

java - 在抽屉布局中使用 Glide 从 Url 使用 CircularImage View 时,应用程序崩溃

exception - 从 Haskell 程序中的堆栈溢出或堆耗尽中恢复

java - 套接字异常 : Connection reset after reconnect

java - 知道从 arrayList 中 get() 哪个对象

java - {} 格式不同?格式化困境