объясните пожалуйста, почему вот так:
Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            int n = (int) iterator.next();
            if(n<10)
                set.remove(n);
        }
        return set;
и вот так:
for(Integer n :set)
            if(n>10)
                set.remove(n);
        return set;
не правильно но вот так:
Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()) {
            if (iterator.next() > 10) {
                iterator.remove();
            }
        }
        return set;
правильно почему в первых двух случаях получается ConcurrentModificationException что это вообще за исключение такое? интернет плохо объясняет(