-1

This code should create a set of numbers (Set), place the 20 different numbers into it and remove from the set all the numbers greater than 1. But when I run it an error occurred: 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;

}
}
Brenden Brown
  • 3,125
  • 1
  • 14
  • 15
genek
  • 113
  • 1
  • 4

1 Answers1

1

You can't modify a collection while iterating, unless you use iterator. Change removeAllNumbersMoreThan10 to:

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;
}

Also, a couple of other recommendations:

  • removeAllNumbersMoreThan10 does not need to modify the set passed in the argument. It needs to create a new set, modify it and return it.

  • a.addAll(removeAllNumbersMoreThan10(a)); is meaningless as Set removes duplicates anyway. It should be HashSet<Integer> numbersLessThan10 = removeAllNumbersMoreThan10(a);

Darshan Mehta
  • 30,102
  • 11
  • 68
  • 102