LoginSignup
11
7

More than 5 years have passed since last update.

【Java】今さらだけど拡張for文はList専用じゃないよ?

Last updated at Posted at 2018-09-10

こないだソースレビューしてたら、「拡張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の値が欲しい時:point_right:普通のforループ。
  • indexの値はいらないから、とにかくぐるぐるまわしたい時:point_right:拡張for文。

個人的には、indexを使うとソースが読みにくいなぁと思うタイプです。
業務で長めの変数名が出てくると、たいていは可読性を考慮して strList.get(i)みたいに1回変数に取り出すんですよね。
上記のサンプルレベルだと、一度変数に取り出しても気にならないのですが、業務だとちょっとウザいと感じることも(私は)あります。

まとめ

  • Listのループは普通のfor文でも書けるし、拡張for文でも書ける。
  • 配列も拡張for文が使えるし、普通のfor文でもOK :ok_hand:
  • (個人的には)indexの値が欲しいかどうかで使い分けている。
11
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7