当前位置: 首页 > 知识库问答 >
问题:

删除[duplicate]时出现ConcurrentModificationException

丌官淇
2023-03-14

这段代码应该创建一组数字(集合),将20个不同的数字放入其中,并从集合中删除所有大于1的数字。但当我运行它时,出现了一个错误:ConcurrentModificationException,

public class Solution
{
public static void main(String[] args) throws Exception
{
    HashSet<Integer> a= createSet();
    a.addAll(removeAllNumbersMoreThan10(a));
    for (Integer nr: a)
        System.out.println(nr);

}

public static HashSet<Integer> createSet()
{
    //add your code here
    HashSet<Integer> set = new HashSet<Integer>();
    for(int i = 0; i < 20; i++)
    {
        set.add(i);
    }


    return set;

}

public static HashSet<Integer> removeAllNumbersMoreThan10(HashSet<Integer> set)
{
    //add your code here
    for (Integer nr: set)
    {
        //System.out.println(nr);
        if (nr > 10)
        {
            set.remove(nr);
        }
    }
    return set;

}
}

共有1个答案

苏墨竹
2023-03-14

在迭代时不能修改集合,除非使用迭代器。将RemoveAllNumbersMotHan10更改为:

public static HashSet<Integer> removeAllNumbersMoreThan10(HashSet<Integer> set){
    //add your code here
    for (Iterator<Integer> iterator = set.iterator(); iterator.hasNext();){
        //System.out.println(nr);
        int nr = iterator.next();
        if (nr > 10){
            iterator.remove();
        }
    }
    return set;
}

此外,还有一些其他建议:

>

  • RemoveAllNumbersMotHan10不需要修改参数中传递的集合。它需要创建一个新的集合,修改它并返回它。

  •  类似资料: