Как получить длину массива в Java
Получите длину массива Java с помощью поля .length, в том числе для многомерных массивов.
Java-массив постоянно хранит свой размер, и вы читаете его через поле length. Это одна из самых распространённых операций с массивами — для перебора элементов, поиска последнего элемента или проверки того, содержит ли массив данные. В этой главе показано, как работает length, чем оно отличается от String.length(), и как измерять многомерные массивы.
Используйте поле length
Каждый массив в Java предоставляет поле public final int length, которое хранит количество элементов. Читается оно без скобок, поскольку это поле, а не метод.
int[] scores = {88, 92, 75, 60, 100};
int size = scores.length; // 5
System.out.println(scores.length); // 5Значение фиксируется при создании массива и никогда не меняется — массивы в Java не растут и не уменьшаются. Если вам нужна изменяемая коллекция, используйте ArrayList, который предоставляет метод size(). Поле length одинаково работает для массивов любого типа: String[], double[] или даже массивов объектов.
Поле против метода: length и length()
Частый источник путаницы — смешение массивов и строк. Массив использует поле length; String использует метод length(). Написав неправильный вариант, вы получите ошибку компиляции.
int[] numbers = {1, 2, 3};
String text = "hello";
System.out.println(numbers.length); // field, no () -> 3
System.out.println(text.length()); // method, with () -> 5| Тип | Как получить размер | Скобки? |
|---|---|---|
Массив (int[], String[], ...) | array.length | Нет |
String | str.length() | Да |
ArrayList, HashMap, ... | collection.size() | Да |
Простое правило: массивы — единственные из трёх, где используется обычное поле. Всё остальное использует вызов метода.
Обработка пустых массивов и доступ к последнему элементу
Массив, созданный с размером 0, — это реальный, ненулевой объект, у которого length равно 0. Это отличается от ссылки null, у которой вообще нет длины — обращение к .length у null вызовет NullPointerException. Чтобы безопасно использовать размер, перебирайте элементы от 0 до length - 1, поскольку последний допустимый индекс всегда на единицу меньше длины.
int[] empty = new int[0];
System.out.println(empty.length); // 0, not an error
int[] data = {10, 20, 30};
int last = data[data.length - 1]; // 30
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}Если массив может быть null, сначала проверьте это: if (data != null && data.length > 0).
Измерение многомерных массивов
Двумерный массив в Java — это фактически массив массивов. Внешнее length даёт количество строк, а каждая строка имеет собственное length для числа столбцов в ней. Строки могут даже иметь разную длину (зубчатый массив), поэтому всегда читайте длину каждой строки отдельно, не предполагая одинаковой ширины.
int[][] grid = {
{1, 2, 3},
{4, 5},
{6, 7, 8, 9}
};
System.out.println(grid.length); // 3 rows
System.out.println(grid[0].length); // 3 columns in row 0
System.out.println(grid[2].length); // 4 columns in row 2Чтобы подсчитать все элементы, суммируйте длину каждой строки вместо умножения строк на столбцы — этот приём работает только для идеально прямоугольных сеток.
Практический пример
Программа ниже объединяет все эти идеи: плоский массив, различие между полем и методом, пустой массив, доступ к последнему элементу и зубчатый двумерный массив, общий размер которого вычисляется суммированием длин строк.
Что следует вынести из запуска:
scores.length = 5подтверждает, чтоlengthчитается как обычное поле без скобок и возвращает количество элементов.word.length() = 5показывает, что размерStringполучается через методlength()— механизм, отличный от поля массива.empty.length = 0доказывает, что массив нулевой длины является допустимым объектом, а неnull, и чтение его длины безопасно.last element = 100демонстрирует, что последний индекс равенlength - 1, поскольку индексация начинается с0.grid.length (rows) = 3, тогда какgrid[2].lengthравно4, что показывает: внешняя длина считает строки, а каждая строка хранит собственную длину — в суммеtotal elements in grid = 9.