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