有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在尝试删除列表中出现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) 个答案

  1. # 1 楼答案

    您只能在循环期间使用迭代器从集合中安全地删除元素

    Iterator<String> myIterator = list1.iterator();
    
    while(myIterator.hasNext()) {
        //add logic to search list and delete element here
     }
    
  2. # 2 楼答案

    不允许通过迭代器中途修改数据结构

    您可以在此处使用普通循环:

    for (int i = 0; i < list1.size(); i++) {
        String obj = list1.get(i);
        ...
    }
    
  3. # 3 楼答案

    您不应该在同一个列表中进行迭代和删除

    创建原始列表的副本。迭代原始列表,但从副本版本中删除项。返回列表的副本