Итак, если я пытаюсь удалить элементы из 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);
Спасибо!