【问题标题】:ConcurrentModificationException while deleting [duplicate]删除时出现 ConcurrentModificationException [重复]
【发布时间】:2018-01-09 22:01:36
【问题描述】:

此代码应创建一组数字(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;

}
}

【问题讨论】:

    标签: java


    【解决方案1】:

    您不能在迭代时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 无论如何都会删除重复项。应该是HashSet&lt;Integer&gt; numbersLessThan10 = removeAllNumbersMoreThan10(a);

    【讨论】:

      猜你喜欢
      • 2013-12-14
      • 2021-12-15
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 2014-06-03
      • 2013-07-15
      • 2020-11-17
      相关资源
      最近更新 更多