HOWTO · Java

如何在 Java 中获取一个二维数组的长度

文章介绍了 Java 中获取二维数组长度的方法。

本页内容

对于名为 arr 的 Java 二维数组,arr.length 返回行数。对于矩形数组,只要外层数组至少有一行,arr[0].length 就会返回每行的列数。Java 将二维数组表示为由多个独立行数组组成的数组,因此锯齿数组的各行长度可能不同。

Java 二维数组如何存储行和列

像 int[][] values 这样的声明表示一个由多个 int[] 行组成的外层数组。外层数组的 length 统计行数组的引用数,而不是网格中的整数总数。每一行都有自己的 length。所有行长度相同的数组是矩形数组;行长度可以不同的数组是锯齿数组。

length 是每个 Java 数组的字段,不是方法。应写作 values.length,不要加括号。要检查指定行的长度,请使用 values[rowIndex].length。

获取矩形二维数组的维度

使用外层数组的 length 获取行数。如果数组至少有一行,并且每行大小相同,那么第一行的 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);
    }
}

输出显示有两行、三列,与 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);
        }
    }
}

输出会列出每一行的长度;如果只需要检查某一行,可以使用 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 数组索引从零开始,最后一个有效索引比 arr.length 小一。然后,在读取该行的长度前,检查 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 行的情况下识别它,而已分配但没有元素的行长度为零。若外层数组本身也可能为 null,读取 arr.length 前应先检查 arr != null。代码和输出块中的英文标签保持原样;它们用于区分 null 行与长度为零的行。