« Javaナイトセミナー (Vol.1)に行ってきたよ♪ | メイン | 「まるごとPerl!」が届きました・・・ »

JavaはIteratorを使うべき理由 Java

ちょっと大人げないかもしれませんが・・・
未来の日記 〜人間ってこんなもの〜 - メモ

イテレータってこんな遅いのか。

半分正解で半分間違い。

多分(呼び出し元が書いてないので何とも言えないが結果から見ると)、
ArrayListを使ってるから
そうなっただけ。

実際にやってみればすぐにわかる。

結果が如実に表れるようにStringBuffer使ってますが、
普通はStringBuilder使いましょう(これもTigerから)

結果


== ArrayList Start ==
拡張for文: 761
for文(Iterator): 597
for文(size毎回取得): 554
for(size初期取得): 548
== ArrayList End ==

== LinkedList Start ==
拡張for文: 582
for文(Iterator): 515
for文(size毎回取得): 181531
for(size初期取得): 176813
== LinkedList End ==

LinkedListだとあり得ないほどIteratorの方が早い。

確かに、普通はArrayListを使うだろうし
たとえLinkedListを使うことがあった場合でも
本来ならコストを考えてそれぞれfor文の書き方を変えた方が良い。

だけど、例えば他のフレームワークから
Listを所得してるとき。
中でどのListが生成されているかを調べなきゃ行けないし
バージョンによって変わるかもしれない。

今までArrayListが返ってきていたから
getでfor文を書いていたとき。
フレームワークをバージョンアップして
もしもそこがLinkedListになっていたら
それだけでかなりのパフォーマンスの低下になる。
(Iteratorの誤差など遙か彼方へ吹き飛ぶほどに)
そのリストを使っているfor文を全部調べ上げて
すべて書式を変更するのはかなりの作業になるだろう。

だから、JavaではIteratorを使うべきだ。

さらに言うと、今までListだった物が
重複を許さなくなりSetになったり
諸々の理由で配列になることもあるかもしれない。
そう言うときも拡張for文にしておけば
for文を書き換える必要がない。

ちなみに何度も言うが拡張for文が取り入れられたのは
もう2年も前の話だ。
Java1.0がリリースされたのが10年前(もうすぐ11年)だから
もうすでに1/5の期間経っていることになる。

あ、あとメリークリスマス♪
(何やってるんだ・・・俺・・・orz)

トラックバック

このエントリーのトラックバックURL:

TBスパムを弾く為、言及の無いTBは受け付けていません。

この一覧は、次のエントリーを参照しています: :

» [Java]スパムじゃないトラックバックがあってびっくりした。JavaはIteratorを使うべき理由 from 未来の日記 〜人間ってこんなもの〜
JavaはIteratorを使うべき理由 Yoshioriの日記: JavaはIteratorを使うべき理由 仰る通りでございます。 テストで使用したのはArrayListです。 確かLinke... [詳しくはこちら]

» [Java]Iteratorより基本forループでArrayListのget()を使ったほうがいいなんて話はもはや百害あって一利なしです。 from 矢野勉のはてな日記
JavaはIteratorを使うべき理由 yoshioriさんがいいこと書いてるのを発見しました。私も大賛成。 今までArrayListが返ってきていたから getでfor文を書いていたとき。 ... [詳しくはこちら]

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

人気のエントリー

▼すべて表示
generated by レビュー・ポスター

あわせて読みたい

あわせて読みたい