[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 1527] バージョンイテ レータの java.util.Iterator での使用



高橋(徹)です。

読書会案内を作っていて、ふっと前回読書会で出た話題(宿題)を思い出しました。
前回の読書会で、2.2.3.3バージョンイテレータ節で、java.util.Iteratorクラスで
使用されているとの記述がありました。
そこでちょっとJDKのソースやドキュメントを調べてみました。
(ほんとにちょっとだけですが)

java.util.Iteratorクラスを見ても何も書いていないので、あれっと思いましたが
実行時例外として、同時変更を検出したときにConcurrentModificationExceptionを
スローすることがあるとあります。
これを手がかりに、試しにArrayListを見ていくと、そのスーパークラスである
AbstractListに見つかりました。
APIドキュメントのjava.util.AbstractListのフィールドmodCount(型はint)は、
リストの構造が変更された回数を保持する変数で、iterator,listIteratorが返す
イテレータの実装で使用しているとのことです。

addやremoveが呼ばれるとmodCount++されます。
イテレータはmodCountが変わっていると、ConcurrentModificationExceptionを
投げるようになっています。
#いまだお目にかかったことはありませんが、、、

--
Toru TAKAHASHI <torutk@xxxxxxxxxxx>
http://www.alles.or.jp/~torutk/