したがって、反復中に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);
ありがとう!