🙆

[Javaの基礎]配列について

に公開

はじめに

ここではJavaの配列ついてまとめています。

配列とは

配列は同じ型の複数の値を一つにまとめて扱うためのデータ構造です。配列は固定長であり、一度作成するとサイズを変更できません。配列自体はオブジェクトであり、ヒープ領域に格納されます。

宣言方法と初期化

宣言の方法は2つあります。
以下のようにC言語のようにも宣言できますが推奨されていません。

int[] numbers;      // 推奨される書き方
int numbers[];      // C言語スタイル、許容される

配列はnewを使って初期化します。

numbers = new int[5];  // 要素数5のint配列(初期値は0)

宣言と同時に初期化する場合には以下のようにします。

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

配列の使用例

配列の要素にアクセスするためには、index番号を使用します。
以下のように添え字を使用する場合以外は拡張for文を使用することが基本です。

public class ArrayExample {
    public static void main(String[] args) {
        int[] scores = {90, 80, 70, 85, 95};

        // 要素のアクセスと出力
        for (int i = 0; i < scores.length; i++) {
            System.out.println("scores[" + i + "] = " + scores[i]);
        }

        // 拡張for文(for-each)でも可能
        for (int score : scores) {
            System.out.println("score = " + score);
        }
    }
}

出力結果

scores[0] = 90
scores[1] = 80
scores[2] = 70
scores[3] = 85
scores[4] = 95
score = 90
score = 80
score = 70
score = 85
score = 95

以下のように多次元配列を使用することも可能です。

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

System.out.println(matrix[1][2]);  // 出力: 6

java.util.Arraysの主なメソッド

Arrays.toString()

配列の内容を文字列として表示できます。

int[] arr = {3, 1, 4};
System.out.println(Arrays.toString(arr));  // [3, 1, 4]

Arrays.sort()

配列のソート(昇順)ができます。

int[] arr = {3, 1, 4};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));  // [1, 3, 4]

Arrays.equals()

配列同士の内容が等しいか比較できます。

int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b));  // true

Arrays.copyOf()Arrays.copyOfRange()

配列をコピー(サイズ変更可)と一部をコピーできます。

int[] original = {10, 20, 30};
int[] copy1 = Arrays.copyOf(original, 5);  // [10, 20, 30, 0, 0]
int[] copy2 = Arrays.copyOfRange(original, 1, 3);  // [20, 30]

Arrays.fill()

配列の全要素に指定値を代入できます。

int[] arr = new int[5];
Arrays.fill(arr, 7);  // [7, 7, 7, 7, 7]

Arrays.binarySearch()

ソート済みの配列に対して二分探索できます。

int[] arr = {10, 20, 30, 40};
int index = Arrays.binarySearch(arr, 30);  // 2(見つかった30のインデックス)

Arrays.asList()

配列をListに変換できます。ただし固定サイズ(要素の追加・削除は不可)です。

String[] strs = {"A", "B", "C"};
List<String> list = Arrays.asList(strs);
// list.add("D"); ← UnsupportedOperationException(サイズ固定)

Arrays.deepToString()

以下のようにArrays.toString(matrix)は各行がint型の配列オブジェクト(メモリのアドレスのような形式)として表示されます。
一方でArrays.deepToString(matrix)を使用することで中の配列も再帰的に文字列化してくれます。

public class DeepToStringExample {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        // 通常の toString()
        System.out.println("toString(): " + Arrays.toString(matrix));

        // deepToString() の使用
        System.out.println("deepToString(): " + Arrays.deepToString(matrix));
    }
}

出力

toString(): [[I@15db9742, [I@6d06d69c, [I@7852e922]
deepToString(): [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Discussion