2012-02-13,
collections
/tips/java/collections
**Iterator内の要素を削除する
Iteratorによるセットやマップ要素の列挙中に、条件に一致した要素を削除したい場合、元々のセットから削除をすると「ConcurrentModificationException」が発生してしまいます。Iteratorそのもののremoveメソッドを使用して削除します。
:Set set = new HashSet();
:set.add(1);
:set.add(2);
:set.add(3);
:set.add(4);
:set.add(5);
:System.out.println("size="+set.size());
:
:Iterator iter = set.iterator();
:while (iter.hasNext()) {
: Integer i = iter.next();
: if(i % 2 == 0){
: // 偶数だったら削除
: // 以下のように書くと、java.util.ConcurrentModificationExceptionが発生
: // set.remove(i);
: iter.remove();
: }
:}
:System.out.println("size="+set.size());