Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

こないだソースレビューしてたら、「拡張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の値が欲しいかどうかで使い分けている。
mtanabe
画面系に抵抗感のないJavaエンジニア。最近はMySQLとも仲がいいです。 設計から実装、テスト、チームメンバーの成果物のレビューなどなど、幅広くやってます。
techfun
Tech FunはITの力で世界を豊かにする総合サービス企業です。 IT研修スクール「TechFun.jp(https://techfun.jp/)」、eラーニングプラットフォーム「StudySmile(https://studysmile.com/)」のほか、ミャンマーオフショア開発、スマートフォンアプリ開発、Webシステム開発、SIサービスを展開しています。
https://www.techfun.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away