删除时出现ConcurrentModificationException

时间:2017-08-02 15:22:49

标签: java

此代码应创建一组数字(Set),将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 个答案:

答案 0 :(得分:1)

除非您使用std::move,否则您在迭代时无法modify收集。将iterator更改为:

removeAllNumbersMoreThan10

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

  • 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; } 不需要修改参数中传递的集合。它需要创建一个新集,修改它并返回它。

  • removeAllNumbersMoreThan10毫无意义,因为a.addAll(removeAllNumbersMoreThan10(a));无论如何都会删除重复项。它应该是Set