Массивы – это удобная структура данных, позволяющая хранить набор однотипных элементов под одним именем. Массивы широко используются для организации и обработки больших объёмов информации.
Создание и наполнение массивов
Начнём с аксиомы: количество элементов массива в Java не изменяется. Если мы создали массив с 10-ю элементами, 11 в нём уже не станет, как и 9. Для того, чтобы получить массив с 9-ю элементами, придётся создать новый и скопировать туда 9 элементов из исходного массива. Такие пироги.
В Java есть два способа объявления массивов:
1 2 |
int array1[]; int[] array2; |
Первый из них использовать в Java не стоит – это моветон, плохие манеры, беды с головой. В общем говоря – это стиль языка программирования C/C++. Но мы где? Мы в Java. Поэтому повсеместно используется второй способ – когда квадратные скобки приурочены не к имени массива, а к его типу.
Как же заполнить данными массив? Как установить, сколько в нём будет элементов? В языке Java есть три способа инициализации массива. Создадим и заполним значениями массив чисел каждым из способов:
1 2 3 |
int[] array1 = new int[5]; int[] array2 = new int[] { 1, 1, 2, 3, 5 }; int[] array3 = { 1, 1, 2, 3, 5 }; |
Они все могут быть использованы и они все правильные и корректные. Отличие первого от остальных способов заключается в том, что при таком объявлении массив заполняется значениями по умолчанию от того типа, элементы которого хранятся в массиве. Раз массив хранит в себе int, а у типа данных int значение по умолчанию 0, то массив array1 заполнился пятью нулями. К примеру, у типа данных boolean значение по умолчанию false, и при таком же раскладе мы получили бы массив с пятью элементами false.
Обращение к элементам массивов
Хорошо бы уметь не только записывать данные в массивы, но и получать эти данные из массива. Делается это очень просто – по индексу. Индекс – порядковый номер элемента в массиве. Вот только программисты нумеруют не совсем так, как нормальные люди: начало нумерации идёт не с единицы, а с нуля. То есть первый элемент массива будет под индексом 0, второй – под индексом 1, третий – под 2 и так далее. Рассмотрим пример.
1 2 3 4 5 6 7 8 9 10 |
public class FirstProject { public static void main(String[] args) { String[] names = { "Зои", "Катарина", "Джинкс", "Шая" }; System.out.println("Элемент №0: " + names[0]); System.out.println("Элемент №1: " + names[1]); System.out.println("Элемент №2: " + names[2]); System.out.println("Элемент №3: " + names[3]); } } |
Мы создали массив элементов строк (String) и проинициализировали его четырьмя элементами – именами персонажей. Затем мы сумели получить записанную в массив информацию при помощи индексов элементов – от 0 до 3, и вывели имена в консоль. Неплохая работа.
Как и в любом деле, важно знать свои лимиты. Если попробоваться схитрить и обратиться к четвёртому индексу, или, чего похуже, к минус первому, то программа быстро поставит вас на место. Попробуем заменить обращение к третьему элементу на обращение к четвёртому:
1 |
System.out.println("Элемент №4: " + names[4]); |
Да, и такое случается в жизни. Всё шло хорошо ровным счётом до того момента, пока программа не дошла до судьбоносной строки с обращением к четвёртому элементу. Когда же она попробовала его найти в массиве names, то словила исключение. Так называются ошибки во время выполнения программ. Красным текстом в консоли написано, что не по-человечески обращаться за границы массива, а индекс 4 выходит за рамки массива размером в 4 элемента.
С остальными индексами, кроме легальных (0, 1, 2, 3) в данном примере будет происходить то же самое. Индексируйте с умом!
Двумерные массивы
До этого мы рассматривали исключительно одномерные массивы. Это простая последовательность элементов, они идут друг за другом и больше никаких сложностей не предусматривается. Но размерности у массивов бывают разные. Это могут быть одномерные, двумерные и даже трёхмерные массивы. Правда, на практике трёхмерные и выше никто не использует. Поэтому углубимся в понятие двумерных массивов.
Двумерные массивы – это, по сути, матрицы. Ещё один пример двумерного массива: список точек с координатами по X, Y и Z. То есть массив массивов, где каждый элемент двумерного массива – это массив из трёх координат. Вот так выглядит объявление и инициализация двумерного массива, где показаны 4 точки, у каждой по 3 координаты (X, Y, Z):
1 2 3 4 |
int[][] coordinates = { {1, 2, 3}, {1, 5, 9}, {2, 8, 5}, {9, 9, 5} }; |
Как видно из примера, пар квадратных скобок у него уже две, и внутри фигурных скобок со значениями тоже есть фигурные скобки. Обращаться к элементам такого массива придётся не по одному индексу, как с одномерными, а по двум:
1 2 3 4 5 6 7 8 9 10 11 |
int x1 = coordinates[0][0]; int y1 = coordinates[0][1]; int z1 = coordinates[0][2]; int x2 = coordinates[1][0]; int y2 = coordinates[1][1]; int z2 = coordinates[1][2]; int x4 = coordinates[3][0]; int y4 = coordinates[3][1]; int z4 = coordinates[3][2]; |
Массивы являются важной частью программирования, облегчая работу с множеством данных одного типа. Они предоставляют инструменты для организации, обработки и передачи информации. На основе массивов могут создаваться более сложные структуры данных вроде списков, словарей и других. Массивы – это ссылочный тип, а не примитивный.