如何在删除集合中的项目时处理ConcurrentModificationException?

时间:2015-02-14 06:19:56

标签: java

我正在尝试删除在我的列表中出现5次的String。这就是我尝试过的:

for(String obj : list1)
{
    if(new ArzList().countOccurrence(list1, obj ) == 5)
    {
        list2.add(obj);
        list1.removeAll(Collections.singleton(obj));                
    }
   else{
        list3.add(obj);
        list1.removeAll(Collections.singleton(obj));
   }
}

但我每次都得到java.util.ConcurrentModificationException

我该如何解决?

3 个答案:

答案 0 :(得分:2)

您不应该通过相同的列表进行迭代和删除。

创建原始列表的副本。遍历原始列表但从复制版本中删除项目。返回列表的重复(复制)版本。

答案 1 :(得分:0)

不允许在迭代器中途修改数据结构。

你可以在这里使用正常循环:

for (int i = 0; i < list1.size(); i++) {
    String obj = list1.get(i);
    ...
}

答案 2 :(得分:0)

您只能使用Iterator从集合中循环删除元素。

Iterator<String> myIterator = list1.iterator();

while(myIterator.hasNext()) {
    //add logic to search list and delete element here
 }