タグ

Collectionとexceptionに関するkiyo_hikoのブックマーク (1)

  • ConcurrentModificationExceptionのスマートな回避方法 - OKWAVE

    次のコードのように反復中にそのコレクションを削除しようとすると、ConcurrentModificationExceptionが発生してしまいます。 Set<Integer> set = new HashSet<Integer>(); for (int i = 0 ; i < 10 ; i++) { set.add(i); } // このループで例外発生 for (Integer currValue : set) { if (currValue % 2 == 0) { set.remove(currValue); } } for (Integer currValue : set) { System.out.println(currValue + " "); } これを回避するために、反復中に削除せず、削除対象をまず保持しておき、その後でまとめて削除するという方法です。 Set<Intege

    ConcurrentModificationExceptionのスマートな回避方法 - OKWAVE
    kiyo_hiko
    kiyo_hiko 2013/09/16
    別に並行処理のつもりでなくても"Concurrent~"がでてビビる for-eachでフィルタリングできないよというのはたしかJavaチュートリアル第4版で読んだ気が。忘れてた → 見直したらIteratorのremoveが唯一安全と書いてあった
  • 1