HOWTO · Java

Java で 2D 配列の長さを取得する方法

Java で 2 次元配列の長さを取得する方法を紹介しています。

このページの内容

Javaの2次元配列 arr では、arr.length で行数を取得できます。長方形配列なら、外側の配列に少なくとも1行ある場合、arr[0].length で各行の列数を取得できます。Javaでは2次元配列は、要素として個別の行配列を持つ配列です。そのため、ジャグ配列では行ごとに長さが異なることがあります。

Javaの2次元配列で行と列を保持する仕組み

int[][] values のような宣言は、int[] 型の行を要素として持つ外側の配列を表します。外側の配列の length は行への参照の数を数えるもので、配列全体に含まれる整数の数ではありません。各行にはそれぞれ独自の length があります。すべての行の長さが同じ配列を長方形配列と呼びます。行によって長さが異なる配列はジャグ配列です。

length はすべてのJava配列が持つフィールドであり、メソッドではありません。括弧を付けずに values.length と書きます。特定の行を調べるには、values[rowIndex].length を使います。

長方形の2次元配列の次元を取得する

行数には外側の配列の length を使います。配列に少なくとも1行あり、すべての行のサイズが同じなら、先頭行の length が列数になります。次の完全な例では、行数と列数の両方を出力します。

次の例を実行します。

このセクションのコードと表示されるラベルや出力は英語のままです。

class Main {
    public static void main(String[] args) {
        int[][] scores = {
            {8, 7, 9},
            {6, 5, 8}
        };

        int rows = scores.length;
        int columns = scores[0].length;
        System.out.println("Rows: " + rows);
        System.out.println("Columns: " + columns);
    }
}

出力には2行3列と表示され、scores の次元と一致します。

Rows: 2
Columns: 3

ジャグ配列の各行の長さを取得する

ジャグ配列には、全体に共通する列数はありません。特定の行を選んで長さを取得するか、外側の配列をループしてすべての行を調べます。ループ条件では rows.length を使い、rows[i].length で選択した行のサイズを取得します。

このセクションのコードと表示されるラベルや出力は英語のままです。

class Main {
    public static void main(String[] args) {
        int[][] rows = {
            {4, 2},
            {7, 1, 3},
            {9}
        };

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

出力には各行の長さが表示されます。1行だけ調べる場合は、rows[1].length のような式を使います。

Rows: 3
Row 0 length: 2
Row 1 length: 3
Row 2 length: 1

空の行やnull行を安全に扱う

arr[0].length を読む前に、外側の配列に行が含まれていることを確認します。new int[0][] で作成した配列には先頭行がないため、インデックス 0 を使う前に arr.length > 0 を確認してください。指定した行にアクセスする場合は、まず rowIndex >= 0 && rowIndex < arr.length を確かめます。Javaの配列インデックスは0から始まり、最後の有効なインデックスは arr.length より1小さい値です。次に、長さを読む前に arr[rowIndex] が null でないことを確認してください。nullの行を参照すると NullPointerException が発生します。要素がないものの実体がある行はこれとは異なり、長さは 0 なので安全に読み取れます。

このセクションのコードと表示されるラベルや出力は英語のままです。

class Main {
    public static void main(String[] args) {
        int[][] arr = { {1, 2}, null, {} };

        System.out.println("Rows: " + arr.length);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == null) {
                System.out.println("Row " + i + " is null");
            } else {
                System.out.println("Row " + i + " length: " + arr[i].length);
            }
        }
    }
}

この例では、次の結果が得られます。

Rows: 3
Row 0 length: 2
Row 1 is null
Row 2 length: 0

nullの行は参照せずに識別され、確保済みで要素のない行の長さは0として扱われます。外側の配列自体が null の可能性がある場合は、arr.length を読む前に arr != null を確認してください。