Java : 回答編(2)
[id:lethevert:20070414:p2]
void f (List l) { for (int i=0; i<l.size(); ++i) { g(l.get(i)); } }
以下ネタバレ注意
-
-
- -
-
この問題を作ったときは、Java 1.4のつもりだったので、1.4の文法にしたがって回答します。
観点は2つです。1つは、for文のところ。
Listはランダムアクセスが効率的とは限らない(LinkedListのケースなど)ので、順次アクセスをする場合は必ずIteratorを使わなければいけません。
for (Iterator i=l.iterator(); i.hasNext();) {
g(i.next());
}
もうひとつは、順次アクセスしかしないのなら、Listインターフェースを要求するまでもないことです。Collectionで十分です。
void f (Collection c) { for (Iterator i=c.iterator(); i.hasNext();) { g(i.next()); } }
Collectionインターフェースにしておかないと、後からMap#keySet()やMap#values()などを渡したくなったときに、直接渡すことができなくて面倒なことになります。
Java 5ならIterableインターフェースがあるので、次のようになります。
void f (Iterable<E> c) { for (E e: c) { g(e); } }