【Java】for文の使い方|拡張for文やforEach・配列/リスト操作・省略形を解説のカバー画像

【Java】for文の使い方|拡張for文やforEach・配列/リスト操作・省略形を解説

公開日:2025/03/21最終更新日:2025/03/22

Javaのfor文は、プログラミングにおける基本的な制御構文の1つであり、繰り返し処理を効率的に記述するために欠かせません。


本記事では、for文の基本構文から、配列・リストを活用した応用例・拡張for文・forEachメソッドの活用・条件式の最適化や省略記法について詳しく解説します。


シンプルなループ処理から高度な最適化までfor文の理解を深め、より効率的なコードを書けるようになりましょう。

1.Javaのfor文とは?

プログラミングにおいて、同じ処理を繰り返し実行することは一般的です。特に大量のデータを扱う場合や、一定の回数で処理を実行する必要がある場合に、ループ処理は欠かせません。


Javaにはfor文・while文・do-while文などのループ制御構文がありますが、その中でもfor文は最も基本的かつ多くの場面で使用されるループ構文です。


for文を使えば、回数を明確に指定したループ処理を簡潔に記述できます。例えば、1から10までの数を順番に出力する場合、for文を使えばわずか3行のコードで実現可能です。


本章ではJavaのfor文の基本構文や動作の仕組みを詳しく解説し、実際のコード例を交えながら、どのように活用できるのかを理解していきます。

for文の基本構文

for文は、指定した回数だけループを繰り返すための制御構文です。その基本構文は以下のようになります。

for (初期化式; 条件式; 更新式) {

    // 繰り返し実行する処理

}

  • 初期化式

    ループが開始される前に、一度だけ実行される式(例:カウンター変数の宣言)

  • 条件式

    ループを継続するための条件(trueの場合ループ継続、falseの場合終了)

  • 更新式

    各ループの反復が終わるたびに実行される式(カウンター変数の増減)

この3つの要素を組み合わせることで、for文は柔軟なループ処理を可能にします。

for文の仕組み

for (int i = 0; i < 5; i++) {

    System.out.println("現在のカウント: " + i);

}

上記のコードは下記のように動作します。

ループ回数

初期化式

条件式

更新式

出力

1回目

i = 0

true

i = 1

現在のカウント: 0

2回目

i = 1

true

i = 2

現在のカウント: 1

3回目

i = 2

true

i = 3

現在のカウント: 2

4回目

i = 3

true

i = 4

現在のカウント: 3

5回目

i = 4

true

i = 5

現在のカウント: 4

6回目

i = 5

false

-

-

このように、iの値が0から4まで増加し、5になった時点でループが終了します。

シンプルな例

次に、1から10までの数値を順番に出力するコードを見てみましょう。

for (int i = 1; i <= 10; i++) {

    System.out.print(i + " ");

}

このコードのポイントは下記の通りです。

  • i = 1からスタートし、i <= 10の間ループを繰り返す

  • i++によってiの値が1ずつ増加する

  • System.out.print(i + " ");によって、改行せずに1から10まで出力

ネストされたfor文

for文の中にfor文を入れることで、二重ループ(ネストされたループ)を作成できます。これは、多次元配列の処理や表形式データの出力などでよく使われます。

for (int i = 1; i <= 3; i++) {

    for (int j = 1; j <= 3; j++) {

        System.out.print("(" + i + ", " + j + ") ");

    }

    System.out.println();

}

このコードのポイントは下記の通りです。

  • 外側のループ(i)は、1回のループごとに1行を出力

  • 内側のループ(j)は、1行の中で3つの値を出力

  • System.out.println();によって各行を改行

コロンを使ったfor文

通常のfor文ではインデックス(i)を利用して要素を取得しますが、コロン(:)を用いると直接要素を変数に代入できます。

int[] numbers = {10, 20, 30, 40, 50};


for (int num : numbers) {  // 各要素を num に代入

    System.out.println("数値: " + num);

}

numbersの各要素が、直接numに代入されるため、シンプルな記述が可能です。

2.for文の応用:配列・Listの操作

Javaのfor文は、単なる繰り返し処理だけでなく、配列やListのデータを操作する際に便利です。本章では、for文を用いた配列やListの操作方法を具体的なコードとともに解説します。

配列を使ったfor文の活用

配列(Array)は、同じ型のデータを連続して格納できるデータ構造です。Javaの配列は固定長であり、作成後にサイズを変更することはできません。


配列の要素を1つずつ取り出すには、for文を利用してインデックスを使う方法が一般的です。

public class ForArrayExample {

    public static void main(String[] args) {

        int[] numbers = {10, 20, 30, 40, 50}; // 配列の宣言と初期化


        for (int i = 0; i < numbers.length; i++) {

            System.out.println("配列の要素 [" + i + "] : " + numbers[i]);

        }

    }

}

配列へのデータ格納とfor文の活用

for文を利用して配列に値を格納する方法は下記の通りです。

public class ForArrayStore {

    public static void main(String[] args) {

        int[] squares = new int[5]; // 要素数5の配列を宣言


        // for文で値を格納

        for (int i = 0; i < squares.length; i++) {

            squares[i] = (i + 1) * (i + 1); // 1, 4, 9, 16, 25 を格納

        }


        // 格納したデータを出力

        for (int i = 0; i < squares.length; i++) {

            System.out.println("squares[" + i + "] = " + squares[i]);

        }

    }

}

このように、for文を利用すると、配列の初期化やデータ格納を効率よく行うことができます。

Listを使ったfor文の活用

Javaには、可変長のデータ構造としてArrayListを含むコレクションフレームワークが提供されています。ArrayListは、要素数が変更可能な配列のように扱える便利なクラスです。

import java.util.ArrayList;


public class ForListExample {

    public static void main(String[] args) {

        ArrayList<String> names = new ArrayList<>(); // リストの宣言

        names.add("Alice");

        names.add("Bob");

        names.add("Charlie");


        for (int i = 0; i < names.size(); i++) {

            System.out.println("名前 [" + i + "] : " + names.get(i));

        }

    }

}

拡張for文を使った配列・リストの操作

Javaには、拡張for文というシンプルな書き方があり、配列やリストの要素を効率よく操作できます。

for (データ型 変数名 : 配列またはリスト) {

    // 繰り返し処理

}

拡張for文は、iなどのループ変数を使わずに記述可能で、可読性が向上するメリットがあります。また、ArrayListやSetなどのコレクションにも対応しています。ただし、要素のインデックスが必要な場合は通常のfor文の方が適しているため、注意が必要です。

配列に対する拡張for文の例

配列に対する拡張for文は下記のように記述します。

public class EnhancedForArray {

    public static void main(String[] args) {

        int[] numbers = {10, 20, 30, 40, 50};


        for (int num : numbers) {

            System.out.println("数値: " + num);

        }

    }

}

リストに対する拡張for文の例

リストに対する拡張for文は下記のように記述します。

import java.util.ArrayList;


public class EnhancedForList {

    public static void main(String[] args) {

        ArrayList<String> names = new ArrayList<>();

        names.add("Alice");

        names.add("Bob");

        names.add("Charlie");


        for (String name : names) {

            System.out.println("名前: " + name);

        }

    }

}


関連記事

JavaのList初期化ガイド|初期化の方法や実装事例、addできない理由なども解説

3.forEach文(ラムダ式を活用したループ処理)

Java 8以降では、従来のfor文や拡張for文に加えて、forEachメソッドが導入されました。forEachはラムダ式を活用して、よりシンプルにコレクションの要素を処理できます。

本章では、forEach文の基本構文や使用例、従来のfor文との違いについて詳しく解説します。

forEach文とは?

forEach文は、コレクション(ListやSet)の要素を簡潔に処理できるメソッドです。

主にArrayListなどのIterableを継承したクラスで利用されます。基本構文は下記の通りです。

list.forEach(要素 -> 処理);

forEach文の具体的な使用例

forEach文は、ListやSet、Mapなどのコレクションに対して簡潔にループ処理を行うことができる便利なメソッドです。従来のfor文や拡張for文と異なり、ラムダ式を活用することで可読性が向上し、より直感的なコードが書けるのが特徴です。

ArrayListをforEachで処理する

ArrayListをforEachで処理する場合、下記のように記述します。

import java.util.ArrayList;


public class ForEachExample {

    public static void main(String[] args) {

        ArrayList<String> names = new ArrayList<>();

        names.add("Alice");

        names.add("Bob");

        names.add("Charlie");


        // forEach を使用

        names.forEach(name -> System.out.println("名前: " + name));

    }

}

メソッド参照を使ったforEach

ラムダ式を使わず、メソッド参照を利用するとさらにシンプルに書けます。

import java.util.ArrayList;


public class ForEachMethodReference {

    public static void main(String[] args) {

        ArrayList<String> names = new ArrayList<>();

        names.add("Alice");

        names.add("Bob");

        names.add("Charlie");


        // メソッド参照を使用

        names.forEach(System.out::println);

    }

}

forEachと従来のfor文の違い

forEachは、ListやMapなどのコレクションに対して直接適用でき、ラムダ式を活用することでコードの可読性を向上させるのが特徴です。

しかし、すべてのケースにおいてforEachが最適とは限りません。


例えば、ループのインデックスを取得したい場合や、要素の値を変更したい場合には、従来のfor文の方が適していることもあります。

for文

拡張for文

forEach

コレクション対応

可能

可能

可能

配列対応

可能

可能

可能

可読性

標準

向上

向上

インデックス取得

可能

不可

不可

要素の変更

可能

不可

不可


関連記事

【2025年版】Javaの最新バージョン|確認方法やインストール方法を解説

4.Java for文の条件式を最適化する方法

for文の条件式は、ループ処理のパフォーマンスやコードの可読性に大きな影響を与えます。不適切な条件式を設定すると、無駄な計算が発生したり、意図しないバグを引き起こしたりする可能性があります。


本章では、for文の条件式を最適化するためのテクニックを具体的なコード例とともに解説します。

条件式の基本とループ処理の流れ

for文の基本構文では、条件式がtrueの間だけループが実行されます。

for (初期化式; 条件式; 更新式) {

    // 繰り返し処理

}

例えば、以下のコードではi < 10がtrueの間、ループが継続されます。

for (int i = 0; i < 10; i++) {

    System.out.println(i);

}

しかし、条件式の記述方法によっては処理速度やメモリ使用量に影響を及ぼすため、最適化が必要です。

条件式の最適化

for文の条件式は、ループの実行回数やパフォーマンスに直接影響を与える重要な要素です。適切に条件式を設計しないと、不要な計算が発生したり、ループが期待通りに終了しなかったりすることがあります。for文の条件式を最適化するための具体的な例を紹介します。

配列やリストのサイズ取得をループ外に出す

NG例

int[] numbers = {1, 2, 3, 4, 5};

for (int i = 0; i < numbers.length; i++) { // ← 毎回 length を取得する

    System.out.println(numbers[i]);

}

改善例

int[] numbers = {1, 2, 3, 4, 5};

int length = numbers.length; // ループ外で取得

for (int i = 0; i < length; i++) {

    System.out.println(numbers[i]);

}

numbers.lengthは配列の場合フィールドアクセスであり計算コストは低いですが、毎回参照が発生します。事前にlength変数へ格納すれば、ループ内のオーバーヘッドを削減できます。

逆順ループは>を使う

リストの要素を逆順に処理する場合、条件式の最適化が重要です。


NG例

for (int i = list.size() - 1; i >= 0; i--) { // ループのたびに size() を呼び出す

    System.out.println(list.get(i));

}

改善例

int size = list.size();

for (int i = size - 1; i >= 0; i--) { // size() の呼び出しを削減

    System.out.println(list.get(i));

}

list.size()を毎回計算せず、事前にsizeに格納することでパフォーマンス向上します。また、i > -1よりi >= 0の方が直感的で可読性が高くなります。

条件式の評価順を最適化

複数の条件を使う場合、評価の順序を考慮するとパフォーマンスが向上します。


NG例

for (int i = 0; i < numbers.length && checkCondition(i); i++) {

    System.out.println(numbers[i]);

}

改善例

for (int i = 0; i < numbers.length; i++) {

    if (!checkCondition(i)) break; // 条件が false なら即終了

    System.out.println(numbers[i]);

}

checkCondition(i)の計算コストが高い場合、毎回の評価を回避することで最適化しています。また、breakを使うことで、無駄なループの実行を防ぎます。


関連記事

Javaのboolean型とは?if文の使い方や初期値・0/1・戻り値・参照渡しなど条件分岐方法を解説!

5.for文の省略記法

Javaのfor文は構文の一部を省略したり、短縮形を活用することで、コードを簡潔に記述できるようになっています。しかし、むやみに省略すると可読性が低下することもあるため、適切な場面で活用することが重要です。


通常のfor文は下記のようなコードになります。

for (int i = 0; i < 5; i++) {

    System.out.println(i);

}

一部を省略する際のパターンとその記述例は下記の通りです。

省略形

省略される部分

初期化式の省略

ループ開始前の変数を事前に宣言

int i = 0; for (; i < 5; i++) {}

条件式の省略

無限ループを作成

for (int i = 0;; i++) {}

更新式の省略

ループ内部でカウント更新

for (int i = 0; i < 5;) { i++; }

全て省略(無限ループ)

全ての要素を省略し、breakで抜ける

for (;;) { break; }


関連記事

Javaプログラミングで何ができる?始め方や基本文法、練習サイト5つを紹介

6.まとめ

本記事では、Javaのfor文について基本構文から応用的な活用方法まで詳しく解説しました。配列やリストの操作には通常のfor文だけでなく、拡張for文やforEachメソッドを活用することで、コードの可読性を向上できます。


また条件式の最適化やfor文の省略記法を適切に使うことで、パフォーマンスを向上させ、無駄な計算を削減できます。用途に応じた最適なループ処理を選択し、効率的なコーディングを心がけましょう。


本記事が皆様にとって少しでもお役に立てますと幸いです。


フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。


開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。

単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。

無料で登録したらスカウトを待つだけ フリーランスの新しい仕事探しを始めよう

フルリモート案件を 無料登録した方限定で配信中

目次

1.Javaのfor文とは?

for文の基本構文

for文の仕組み

シンプルな例

ネストされたfor文

コロンを使ったfor文

2.for文の応用:配列・Listの操作

配列を使ったfor文の活用

配列へのデータ格納とfor文の活用

Listを使ったfor文の活用

拡張for文を使った配列・リストの操作

配列に対する拡張for文の例

リストに対する拡張for文の例

3.forEach文(ラムダ式を活用したループ処理)

forEach文とは?

forEach文の具体的な使用例

ArrayListをforEachで処理する

メソッド参照を使ったforEach

forEachと従来のfor文の違い

4.Java for文の条件式を最適化する方法

条件式の基本とループ処理の流れ

条件式の最適化

配列やリストのサイズ取得をループ外に出す

逆順ループは>を使う

条件式の評価順を最適化

5.for文の省略記法

6.まとめ