こないだソースレビューしてたら、「拡張for文ってList専用だと思ってました!」って言われたので、改めて「そんなことないよ」ってことをここに記します。
Listをループしてみる
どちらの方法でも同じ結果が出力されます。
List<String> strList = new ArrayList<String>(); // list要素への代入処理は省略。
// listを普通のfor文でループする。
for ( int i = 0 ; i < strList.size() ; i++) {
System.out.println(strList.get(i));
}
// listを拡張for文でループする。
for (String string : strList) {
System.out.println(string);
}
配列をループしてみる
こちらも、同じ結果が出力されます。
String[] strArray = new String[5]; // 配列要素への代入処理は省略。
// 配列を普通のfor文でループする。
for ( int i = 0 ; i < strArray.length ; i++) {
System.out.println(strArray[i]);
}
// 配列を拡張for文でループする。
for (String string : strArray) {
System.out.println(string);
}
私なりの使い分け方
indexの値が欲しいかどうかで使い分けてます。
- indexの値が欲しい時
普通のforループ。
- indexの値はいらないから、とにかくぐるぐるまわしたい時
拡張for文。
個人的には、indexを使うとソースが読みにくいなぁと思うタイプです。
業務で長めの変数名が出てくると、たいていは可読性を考慮して strList.get(i)
みたいに1回変数に取り出すんですよね。
上記のサンプルレベルだと、一度変数に取り出しても気にならないのですが、業務だとちょっとウザいと感じることも(私は)あります。
まとめ
- Listのループは普通のfor文でも書けるし、拡張for文でも書ける。
- 配列も拡張for文が使えるし、普通のfor文でもOK
- (個人的には)indexの値が欲しいかどうかで使い分けている。