- PR -

Iteratorについて

投稿者投稿内容
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2003-10-17 13:53
unibon です。こんにちわ。

引用:

eijiさんの書き込み (2003-10-15 14:49) より:
私の場合、内部構造を隠蔽したい場合(ユーティリティー等)は、Iterator を
使用し、その他は、size()+ get(n) を使用していましが、
本当はどう違うんだろうという疑問がわき投稿しました。


ループ変数(i 等)などのループ状態(ループの途中経過の状態)を
隠蔽した仕組みが Iterator だと思います。
したがって、ループ変数を使わないで済むならできるだけ Iterator を使うが、
ループ変数を意識せざるを得ないような場合は無理に Iterator を使わない、
のが良いと思います(好みも大きいですが)。

これは、たとえば、
コード:
void foo(List list) {
    for (int i = 0; i < list.size(); i++) {
        System.out.println(i + "th value is " + list.get(i));
    }
}

のようなものは、ループ変数の値にも意味があるので、これを無理やり、
コード:
void foo(List list) {
    int i = 0;
    for (Iterator it = list.iterator(); it.hasNext(); i++) {
        Object o = it.next();
        System.out.println(i + "th value is " + o);
    }
}

のようにするのは、避けたほうが良い、という意味合いです。

なお、Iterator はどうしてもラッパになってしまうので、
多少遅くなるのはしかたがないので、それは問わないという前提で書きました。
これを言い出すと list.size() なども
for ループの前に評価を完了しておくべきだとか、
いろいろ細かくなってしまいますので。
#実行環境によって一概には言えませんが。

スキルアップ/キャリアアップ(JOB@IT)