拡張for文を使う理由
JDK1.5から利用できる拡張for文を使う理由をまとめました。
- 見た目がシンプルだから
確かにシンプルです。
List<String> strList = new ArrayList<String>(); //要素追加 //これまでのfor文 for(int i = 0; i < strList.length; i++){ System.out.println(strList.get(i)); } //これからのfor文 for(String str : strList){ System.out.println(str); }
しかし、理由はこれだけではありません。
- パフォーマンスも上がるから
実はこれは半分嘘です。
strArrayがArrayList型であった場合、「これまでのfor文」のようにgetした方が30%程度パフォーマンスが上がります。
ですが、仮にstrArrayがLinkedList型であった場合、「これまでのfor文」のようにgetをすると、99%以上パフォーマンスが下がります。
参考ページ:JavaはIteratorを使うべき理由
つまり、strArrayがLinkedList型である場合に、拡張for文を使うとパフォーマンスが上がります。
では、forで回すリストの実装によってfor文を使い分ければいいのではないでしょうか?
しかし、拡張for文にはもう一つ良い点があります。
- コードの柔軟性が上がる
拡張for文を使っていれば、for文に渡されるオブジェクトがArrayListかLinkedListか分からない場合でも、「99%以上パフォーマンスが下がる」という心配をしなくて済みます。
また、拡張for文は、Listインタフェースの実装型をイテレータを使ったコードに変換し、配列の場合にはインデックスアクセスするコードに変換してくれます。
参考ページ:J2SEトラの穴-拡張 for 文ー実際はどうなってんだ ????
このコンパイラの翻訳によって、for文に渡すリスト又は配列に適したコードが生成されることが分かります。つまり、拡張forさえ使えば何も考えなくていい、何も心配しなくていいということです。まずいことがあればAPIの裏でなんとかしてくれる、ということです。