Итак, если я попытаюсь удалить элементы из Java HashSet во время итерации, я получу ConcurrentModificationException. Как лучше всего удалить подмножество элементов из HashSet, как в следующем примере?
Set<Integer> set = new HashSet<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
// Throws ConcurrentModificationException
for(Integer element : set)
if(element % 2 == 0)
set.remove(element);
Вот решение, но я не думаю, что оно очень элегантное:
Set<Integer> set = new HashSet<Integer>();
Collection<Integer> removeCandidates = new LinkedList<Integer>();
for(int i = 0; i < 10; i++)
set.add(i);
for(Integer element : set)
if(element % 2 == 0)
removeCandidates.add(element);
set.removeAll(removeCandidates);
Спасибо!