従来型 vs モダンな書き方(インクリメントの比較)
では「従来型のインクリメントを使ったコード」と「モダンな書き方」を並べて比較できる表を下記に用意したので確認してみましょう。
| シーン | 従来型(インクリメント使用) | モダンな書き方(インクリメント不要) | メリット |
|---|---|---|---|
| 配列の走査 | java\nfor (int i = 0; i < arr.length; i++) {\n System.out.println(arr[i]);\n}\n | java\nfor (int value : arr) {\n System.out.println(value);\n}\n | foreachはインデックス管理不要で安全 |
| リストの走査 | java\nfor (int i = 0; i < list.size(); i++) {\n System.out.println(list.get(i));\n}\n | java\nlist.forEach(System.out::println);\n | コードが簡潔で意図が明確 |
| 条件付きカウント | java\nint count = 0;\nfor (int i = 0; i < list.size(); i++) {\n if (list.get(i).startsWith(\"A\")) {\n count++;\n }\n}\n | java\nlong count = list.stream()\n .filter(s -> s.startsWith(\"A\"))\n .count();\n | Streamで宣言的に書ける |
| 逆順ループ | java\nfor (int i = arr.length - 1; i >= 0; i--) {\n System.out.println(arr[i]);\n}\n | java\nIntStream.iterate(arr.length - 1, i -> i >= 0, i -> i - 1)\n .forEach(i -> System.out.println(arr[i]));\n | IntStreamで境界条件を明示できる |
| イテレータ利用 | java\nfor (int i = 0; i < list.size(); i++) {\n System.out.println(list.get(i));\n}\n | java\nIterator<String> it = list.iterator();\nwhile (it.hasNext()) {\n System.out.println(it.next());\n}\n | 削除操作も安全にできる |
まとめ
- 従来型:
i++を使った for文が基本。シンプルで直感的。 - モダン型: foreach / Stream / forEach / IntStream を使うと、インクリメント不要で安全。
- 実務の指針:
- インデックスが必要 → for文 or IntStream
- 要素だけ必要 → foreach / forEach / Stream
💡 つまり「インクリメントを正しく使える」ことは基礎力、「インクリメントを書かなくても済む方法を選べる」ことが応用力です。

