自分も含めTopCoderでJavaを使ってる人のソースを見てると、ArrayListやTreeSetでGenericsを使ってることが多く「1.5の機能もだいぶ使われてるな」と思いきやそうでもなかった。
確かにGenericsを使ってる人は多いのだが、TopCoderの多くの人達(自分も含め)は拡張for文を使わずにIteratorを使ってぐるぐる回してるじゃないか!Genericsは使われるのに拡張for文を使わない理由ってなんだろう?Genericsは従来通りの書き方に比べてちょっと型名なんかを追加するだけなのに対して、拡張for文はIteratorを使う部分が短くなるけど、今までのと書き方がずいぶんと違うように見えるせいだろうか?とりあえず拡張for文を使った簡単なプログラムを書いてみる。
import java.util.TreeSet; import java.util.Iterator; public class Test{ public static void main(String args[]){ int[] data = {999, 123, 645, 702, 338}; TreeSet<Integer> set = new TreeSet<Integer>(); for(int i = 0; i < data.length; i++){ set.add(data[i]); } System.out.println("Iteratorを使ってループ"); Iterator<Integer> iter = set.iterator(); while(iter.hasNext()){ System.out.println(iter.next()); } System.out.println("拡張for文を使ってループ"); for(int result : set){ System.out.println(result); } } }
Iteratorを使うときよりソースが若干短くなるんだし、慣れれば拡張for文を使うようになるかもね。