как узнать размер массива в java
Массивы в Java: создаём, заполняем, используем
Учимся работать с массивами в Java. Всё разбираем на примерах.
Массив — это структура данных, которая хранит набор пронумерованных значений одного типа.
Допустим, у нас есть класс из десяти учеников и нам нужно сохранить их оценки. Для этого можно создать десять переменных:
А если в нашем классе будет не десяток учеников, а в десять раз больше, не заводить же нам 100 переменных! На выручку приходят массивы.
Java-разработчик, преподаёт в Skillbox, осваивает машинное обучение.
Как объявить одномерный массив
С помощью квадратных скобок и специального слова new.
Такой синтаксис пришёл из языка C:
Но в Java предпочтительнее делать так:
Тип массива может быть любым (int, Integer, String, Date, byte, char, Long и так далее).
Инициализация массива по умолчанию
Объявим массив типа int из 10 элементов:
При подобной инициализации все элементы массива будут иметь значение по умолчанию. Для int это 0; для float и double — 0.0; для char — \0; для boolean — false, а для String и любого другого класса это null.
Размер массива (длина, протяжённость) определяется при объявлении, а изменить его можно только пересоздав массив.
Доступ к элементам массива
Начнём с одномерного массива. Каждый элемент в нём хранится под своим индексом.
Важно помнить, что в Java нумерация элементов массива начинается с 0. Поэтому индекс первого элемента равен 0, а у последнего определяется размером массива минус один.
Для доступа к элементу массива указывают имя массива и номер ячейки в квадратных скобках. Например, обратимся к первому элементу массива и выведем его значение:
В консоли мы получим число 0. Почему ноль — читайте выше, в пункте про инициализацию по умолчанию.
Заполним элементы массива. Для этого обратимся к каждому по индексу и присвоим значения с помощью оператора « =»:
Инициализация массива на этапе объявления
Теперь у нас есть массив, куда мы записали оценки десяти учеников. С этим уже удобнее работать, чем объявлять 10 переменных, но можно записать ещё короче:
Мы опустили размер массива, поставили фигурные скобки после квадратных и перечислили все значения через запятую. Размер массива теперь определяется числом элементов в фигурных скобках (в нашем случае их тоже 10).
Но нет предела совершенству:
После знака « =» остались только фигурные скобки с перечислением значений через запятую.
Обход одномерного массива
У массива в Java есть специальное поле length. Значение в нём нельзя изменить. Оно возвращает число элементов массива:
А раз мы знаем длину массива и что все его ячейки упорядочены, то остаётся обратиться к ним по очереди — в цикле:
С помощью счётчика в цикле for мы получаем индекс каждого элемента.
Напомним! Счётчик должен стартовать с 0, так как нумерация в массиве тоже начинается с 0.
И цикл будет продолжаться «пока счётчик меньше размера массива», а раз индекс последнего элемента на один меньше их количества, то выхода за границы массива в нашем цикле не произойдёт.
Массив можно обойти и в цикле foreach (подробнее о циклах):
И в обратном порядке:
Здесь счётчик стартует со значения на один меньше размера массива, и цикл продолжается «пока счётчик не меньше 0».
Можем пройтись и только по элементам с чётными индексами:
А вот как заполнить массив случайными значениями:
N-мерные массивы
Размерность массива определяется тем, сколько индексов нужно, чтобы однозначно указать на элемент в массиве.
Массивы бывают одномерными ( векторы), двумерными ( матрицы), трёхмерными и так далее. То есть можно создавать не просто массивы, но и массивы массивов, а также массивы массивов массивов и так далее.
Рассмотрим вариант с двумерным массивом. Остальные многомерные массивы создаются похоже.
Объявление двумерного массива
Чтобы создать двумерный массив, укажем его размеры в квадратных скобках:
Доступ к элементу подобного массива выглядит так:
Мы присвоили значение 2 элементу с индексами [0,1].
Для простоты представим двумерный массив в виде таблицы. Вот как выглядит наш массив (столбцы — это первый индекс в квадратных скобках, а строки — второй):
[0,0] = 0 | [1,0] = 0 | [2,0] = 0 |
---|---|---|
[0,1] = 2 | [1,1] = 0 | [2,1] = 0 |
[0,2] = 0 | [1,2] = 0 | [2,2] = 0 |
[0,3] = 0 | [1,3] = 0 | [2,3] = 0 |
Несложно представить двумерный массив таблицей, а трёхмерный — кубом, но вот с массивами большей размерности так уже не получится.
Массивы внутри массива в Java могут быть разной длины. Зададим двумерный массив, где размер третьего массива (по индексу второго) равен двум элементам, а размер всех остальных — трём:
Как помним, размер массива нам не изменить, но мы можем присвоить новый массив элементу с нужным индексом.
Если мы объявляем двумерный массив так:
то размер каждого вложенного массива будет равен четырём элементам.
А теперь заменим массив под индексом 1 (длиной в четыре элемента) массивом из двух элементов:
Как видно из примера, мы можем обращаться к внутренним массивам нашего двумерного массива, а не только к значениям в этих массивах.
Проверим, что размер массива под индексом 1 теперь равен двум элементам. Для этого используем цикл с выводом в консоль:
Для обхода элементов двумерного массива применяем уже два цикла:
Длина массива в Java
Я объявил массив, как показано ниже:
Затем я присвоил массиву следующие значения:
Затем я объявил и инициализировал целочисленную переменную:
Это будет полезно для определения фактического размера, но есть ли способ найти логический размер массива?
14 ответов
И он вернет 10, заявленный размер. Элементы, которые вы не объявляете явно, инициализируются с 0.
Свойство length всегда показывает общее выделенное пространство для массива во время инициализации.
Если у вас возникнут какие-либо проблемы подобного рода, просто запустите их. Удачного программирования!
Длина будет всегда 15, независимо от того, сколько индексов заполнено.
И еще одна вещь, когда вы инициализируете массив целых чисел, все индексы будут заполнены «0».
В этом случае arr.length вернет 10, размер выделенного вами массива. Логический размер здесь не применим, так как это массив фиксированной длины.
Когда вы инициализируете массив:
Java создаст массив из 10 элементов и инициализирует все из них до 0. См. Спецификация языка Java для получения подробных сведений о начальных значениях для этого и других примитивных типов.
В Java ваш «фактический» и «логический» размер совпадают. Во время выполнения все слоты массива заполняются значениями по умолчанию при выделении. Итак, ваш a содержит 10.
int array [] = new int [3]; Array.length;
Он будет содержать фактический размер массива, так как это то, что вы инициализировали массив, когда он был объявлен. В Java нет понятия «логического» размера массива, поскольку в этом случае значение по умолчанию 0 так же логично, как и значения, которые вы установили вручную.
Он содержит выделенный размер, 10. Остальные индексы будут содержать значение по умолчанию, равное 0.
Если вам нужен логический размер массива, вы можете просмотреть все значения в массиве и проверить их на ноль. Увеличьте значение, если оно не равно нулю, и это будет логический размер. Поскольку размер массива фиксирован, у вас нет встроенного метода, возможно, вам стоит взглянуть на коллекции.
Скобки следует избегать.