Java: 配列

配列は同じ型のデータを格納するコンテナです。このレッスンでは、Javaでの配列の使用方法を学びます。

1. 配列とは

配列は同じ型の要素の固定サイズのコレクションです。

(1) 配列の特徴

特徴 説明
固定サイズ 作成後にサイズを変更できない
同じ型 すべての要素が同じ型でなければならない
連続ストレージ 要素はメモリ内に連続して格納
インデックスアクセス インデックスで要素にアクセス(0から開始)

2. 宣言と初期化

(1) 方法1:先に宣言してから初期化

TEXT 📖 参照専用
// 配列を宣言
int[] arr;

// 初期化(スペースを割り当て)
arr = new int[5];  // 5つの要素、デフォルト値は0

(2) 方法2:宣言と初期化を同時に行う

JAVA
// サイズを指定
int[] arr = new int[5];

// 直接代入
int[] arr = {1, 2, 3, 4, 5};

(3) サンプル:配列の初期化

JAVA
public class ArrayInit {
    public static void main(String[] args) {
        // 方法1:サイズを指定
        int[] arr1 = new int[3];
        arr1[0] = 10;
        arr1[1] = 20;
        arr1[2] = 30;
        
        // 方法2:直接代入
        int[] arr2 = {10, 20, 30};
        
        // 方法3:new + 代入
        int[] arr3 = new int[]{10, 20, 30};
        
        System.out.println(arr2[0]);  // 10
        System.out.println(arr2[1]);  // 20
        System.out.println(arr2[2]);  // 30
    }
}
▶ 試してみよう
⚠️ 注意: 配列のインデックスは0から始まります。最大インデックスは長さ-1です。範囲外へのアクセスはArrayIndexOutOfBoundsExceptionをスローします。


3. アクセスと変更

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

// 要素にアクセス
int first = arr[0];   // 10
int third = arr[2];   // 30

// 要素を変更
arr[1] = 200;         // 20を200に変更

// 配列の長さを取得
int len = arr.length; // 5

4. 配列の走査

(1) 方法1:通常のforループ

TEXT 📖 参照専用
int[] arr = {10, 20, 30, 40, 50};

for (int i = 0; i < arr.length; i++) {
    System.out.println("arr[" + i + "] = " + arr[i]);
}

(2) 方法2:for-eachループ

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

for (int num : arr) {
    System.out.println(num);
}

(3) サンプル:平均値の計算

JAVA
public class ArrayAverage {
    public static void main(String[] args) {
        int[] scores = {85, 92, 78, 96, 88};
        int sum = 0;
        
        for (int score : scores) {
            sum += score;
        }
        
        double avg = (double) sum / scores.length;
        System.out.println("平均値: " + avg);  // 87.8
    }
}
▶ 試してみよう

5. Arraysユーティリティクラス

java.util.Arraysは配列操作のためのユーティリティメソッドを提供します。

(1) 一般的なメソッド

メソッド 説明
sort() ソート Arrays.sort(arr)
copyOf() コピー Arrays.copyOf(arr, newLen)
fill() 埋める Arrays.fill(arr, value)
equals() 比較 Arrays.equals(arr1, arr2)
toString() 文字列に変換 Arrays.toString(arr)
binarySearch() 二分探索 Arrays.binarySearch(arr, key)

(2) サンプル:Arraysの使用

JAVA
import java.util.Arrays;

public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr = {5, 2, 8, 1, 9, 3};
        
        // ソート
        Arrays.sort(arr);
        System.out.println("ソート後: " + Arrays.toString(arr));
        // [1, 2, 3, 5, 8, 9]
        
        // コピー
        int[] arr2 = Arrays.copyOf(arr, 3);
        System.out.println("最初の3つ: " + Arrays.toString(arr2));
        // [1, 2, 3]
        
        // 埋める
        int[] arr3 = new int[5];
        Arrays.fill(arr3, 100);
        System.out.println("埋めた後: " + Arrays.toString(arr3));
        // [100, 100, 100, 100, 100]
        
        // 検索(最初にソートが必要)
        int index = Arrays.binarySearch(arr, 5);
        System.out.println("5のインデックス: " + index);  // 3
    }
}
▶ 試してみよう

6. 二次元配列

二次元配列は「配列の配列」と考えることができます。

(1) 宣言と初期化

TEXT 📖 参照専用
// 方法1:サイズを指定
int[][] matrix = new int[3][4];  // 3行4列

// 方法2:直接代入
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

(2) サンプル:二次元配列の走査

JAVA
public class TwoDArrayDemo {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };
        
        // 走査
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.println();
        }
        // 出力:
        // 1 2 3
        // 4 5 6
        // 7 8 9
    }
}
▶ 試してみよう

(3) サンプル:行列の転置

JAVA
public class MatrixTranspose {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6}
        };
        
        // 転置: 2行3列 → 3行2列
        int[][] transposed = new int[3][2];
        
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                transposed[j][i] = matrix[i][j];
            }
        }
        
        // 転置された行列を表示
        for (int[] row : transposed) {
            System.out.println(java.util.Arrays.toString(row));
        }
        // [1, 4]
        // [2, 5]
        // [3, 6]
    }
}
▶ 試してみよう

7. Varargs(可変長引数)

Varargsにより、メソッドが可変数の引数を受け取ることができます。

(1) 構文

JAVA
public static int sum(int... numbers) {
    int total = 0;
    for (int num : numbers) {
        total += num;
    }
    return total;
}

(2) サンプル:Varargs

JAVA
public class VarargsDemo {
    public static void main(String[] args) {
        System.out.println(sum(1, 2));           // 3
        System.out.println(sum(1, 2, 3));        // 6
        System.out.println(sum(1, 2, 3, 4, 5));  // 15
    }
    
    public static int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }
}
▶ 試してみよう
⚠️ 注意: Varargsはメソッドの最後のパラメータでなければならず、メソッドには1つのvarargsパラメータしか持つことができません。


8. 一般的な配列アルゴリズム

(1) サンプル:バブルソート

JAVA
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = {5, 2, 8, 1, 9, 3};
        
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        
        System.out.println(java.util.Arrays.toString(arr));
        // [1, 2, 3, 5, 8, 9]
    }
}
▶ 試してみよう

(2) サンプル:最大値を見つける

JAVA
public class FindMax {
    public static void main(String[] args) {
        int[] arr = {5, 2, 8, 1, 9, 3};
        int max = arr[0];
        
        for (int num : arr) {
            if (num > max) {
                max = num;
            }
        }
        
        System.out.println("最大値: " + max);  // 9
    }
}
▶ 試してみよう

▶ サンプル

JAVA
int[] nums = {10, 20, 30, 40, 50};
for (int n : nums) {
    System.out.println(n);
}
▶ 試してみよう

❓ よくある質問

Q 配列のサイズは変更できますか?
A いいえ。配列のサイズは固定です。動的なサイズが必要な場合は、ArrayListを使用してください。
Q 配列にはデフォルト値がありますか?
A はい。intは0、doubleは0.0、booleanはfalse、参照型はnullです。
Q Arrays.sort()はどのソートアルゴリズムを使用していますか?
A プリミティブ型にはデュアルピボットクイックソート、オブジェクトにはTimSort(マージソートの変種)を使用しています。

📖 まとめ

📝 練習問題

  1. 配列操作: 10個の要素を持つ配列を作成し、1-10の値を割り当て、逆順で表示
  2. 最大値/最小値: 配列の最大値と最小値を見つける
  3. バブルソート: バブルソートアルゴリズムを実装し、配列を昇順にソート

9. 次のレッスン

次のレッスンでは、実践:基礎を学びます — 最初の7レッスンの知識を適用します。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%