JavaのIteratorってなんなんだ


何?

 結構前にJavaの授業でIterator(java.util.Iterator)についての説明があった。正直見ている限りめんどくさい以上の感覚がしなかったのでネットで調べる。

Wikipedia イテレータ

イテレータ(英語: iterator)とは、プログラミング言語において配列やそれに類似する集合的データ構造(コレクションあるいはコンテナ)の各要素に対する繰り返し処理の抽象化である。実際のプログラミング言語では、オブジェクトまたは文法などとして現れる。JISでは反復子(はんぷくし)と翻訳されている。

 よし。解決だ。

わからん

 まぁWikipediaのこの説明で分かったら世の中は楽だ。しかし僕はあまり頭が良くない初心者なのでこれでは理解出来ない。結局java.util.Iteratorはどう使えばいいのか? 数え上げでIterator使うぐらいならそもそもほとんどfor文で書けるんじゃないか? そう思った。当然下記のように書けばいいだろう。

fortest.java
//何らかのデータ。
for (int i = 0; i < data.length; i++){
    System.out.println(data[i]);
}

 じゃあIteratorはいらない。よし、解決だ。

んなわけない

 それで終わるはずもない。確かにIteratorは今でこそ知らん知らん状態となっているが、残っているだけの理由がちゃんとあるはずだ。学校で教えられた要件は「全部forでいいんじゃね?」と思ったがそれ以外の使い道があるだろう。そういう訳で色々調べた結果、コレクションを使う時に便利である事が分かった。……コレクションの事を覚えていない自分のためにそれも調べると、即ち「大きさの決まっていない」配列であり、List、Set、Mapなどの事である。らしい。(スキルレベルのなさを痛感しながらこれを書いている)
 そういう訳でデータの要素の数が分からない(知らない)場合であったとしても、Iteratorクラスを使えば次の要素を問題なく取得出来る(hasNext()とか使う)が、for文の場合は上限が定まらないために上記プログラムで言う所の「i < data.length」が書けない。そういう訳でIteratorは役に立つのだ。ありがとうIterator! いらないとか言ってごめんよIterator!

めっちゃ参考になった文献

Qiita - [Java] Iteratorのメモ
本当に参考になった。具体的な使い方はこれがとても詳しくて感激

teratail - 【デザインパターン】Iteratorパターンを使うべきケースが理解できません。
同じことを思った人間がいた。これの回答者さんの説明が理解しやすくすごく良かった