iterator

久々にjavaをやる機会があり、気づいたこと。
ループ処理で、よくArrayListを処理したい場合に、for文を使用する場合があると思います。
javaでは、for文を使用しないでArrayListからIteratorを取得し、
while文でループ処理をすることができます。
正直私は、どちらがいいのかわかりませんでした。
調べたところ、

JavaはIteratorを使うべき理由
で書いてあるとおり、Iteratorを使用した方がいいことを知りました。

また、他にIteratorを使用する理由として、
並列処理(マルチスレッド)を考慮した場合に、Iteratorを使用した方がいいことが分かりました。
というのも、
マルチスレッドで、ArrayListのデータを排他管理しなければならない場合に、
排他管理に失敗していても通常処理されてしまい、
本来、変更されていけない部分でデータが変更されてしまい、
思いがけない処理がされてしまうことがあります。

しかし、Iteratorの場合は
スレッドAでIterator処理中に
スレッドBでスレッドAで処理中のIteratorの元のArrayListに対して変更したら、
スレッドAのIterator処理でConcurrentModificationException がthrowされます。

よって、エラーが発生するため、排他管理ができていないという問題を早期的に知ることができました。
是非、Iteratorは積極的に使用しましょう。