2012-06-14 107 views

答えて

31

Javaのコレクションの多くは、「フェイル・ファースト」なイテレータを生成します。つまり、イテレータが作成された後にコレクションが変更されると、イテレータは無効化され、できるだけ早くConcurrentModificationExceptionをスローします。 (後で失敗するか無効なデータを返すと比較して)

この機能をサポートするために、コレクションは変更されたかどうかを追跡する必要があります。コレクションが変更されるたびに、modcountがインクリメントされます。コレクションでイテレータが生成されると、イテレータは作成されたときの値modcountを格納します。次に、イテレータを使用しようとするたびに、保存されたmodcountが親コレクションの現在のmodcountと異なるかどうかを確認します。そうであれば、反復子はConcurrentModificationExceptionで失敗します。

(この規則の例外は、イテレータのremove方法などのイテレータ自体()を介して行われ、コレクションへの変更はイテレータを無効にしないことです。)これは本当に良い説明のため

+1

感謝。私はそれがこのような何かを知っていたが、詳細ではない – moeTi

+0

非常に良い説明。今は理にかなっています。 –

+0

コード:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.ListItr – roottraveller

関連する問題