Javaのイテレータは遅い? #wdpress

Web+DB Press の Vol.70 に、「Javaの底力 ── 火消しエンジニアが明かすテクニック【第2回】Javaでナノチューニング! …… パフォーマンスを最大限に引き出す書き方」として、このような記事が載っていました。批評のために引用します。






これは、このテスト条件下ではもちろん正しいですが、一般化するには危険な記事だと思います。
まず、Iterator が高価(遅い)と書いてありますが、Iterator はインタフェースなので、それが遅いか早いかは、当然その実装クラスに依ります。この記事は、Java6 で、実装クラスは ArrayList を使用しているので、(たまたま)遅いという結果が出ただけです。


Java7 では拡張for文を使っても、遅くなることはないという報告があります。
今更ながら拡張for文について - 草木のにをいに誘われた


Java5/6でも、LinkedList だと(データ構造上当然ですが)大幅にイテレータ(拡張for文)のほうが早いです。
http://yoshiori.org/blog/2006/12/javaiterator.php


拡張for文のほうが、Set や配列にしてもロジックを変えなくて良いし、なにより可読性が高いので、よっぽどのことがない限り拡張for文を使うべきだと思います。
この記事を鵜呑みにして、安易に『拡張for文は使用禁止』などというコーディング規約が作成されないことを祈ります。