タグ

iteratorに関するkiyo_hikoのブックマーク (2)

  • 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が唯一安全と書いてあった
  • Iterator Interface

    Iteratorインタフェースはコレクションの要素を先頭から1つづつ、シーケンシャルにアクセスするためのインタフェースです。GoFのデザインパターンのイテレータパターンに対応しており、その特徴は コレクションの内部表現を公開せずに、要素にアクセスできる ことにあります。このため、Iteratorインタフェースをインプリメントしたクラスやその要素数、要素の保持方法などによらずに統一したインタフェースで要素にアクセスすることができます。 Iteratorインタフェースなので、そのまま生成することはできません。生成にはCollectionインタフェースのiteratorメソッドを使用します。 CollectionインタフェースはListインタフェースやSetインタフェースのスーパーインタフェースなので、これらのインタフェースでも使用することができます。 コレクションのシーケンシャルアクセス It

    kiyo_hiko
    kiyo_hiko 2011/12/06
    Perlでシーケンシャルアクセスさせるためのクラスを発明するので参考に
  • 1