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

}
}
0

1 Answer 1

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

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.