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 を確認してください。