Массивы Java: что такое, описание, примеры, методы
Попробуйте вообразить себе ячейки, которые вы когда-то видели в камерах хранения. Каждой из них присваивается традиционно свой отдельный номер. Или другая альтернатива в виде винной карты. В ней указаны по номерам все названия вин, а потому достаточно вам продиктовать тот или иной номер, как тут же будет понятно, какой напиток вы хотите получить.
Примерно так же можно толковать массивы Java. Это инструмент, позволяющий работать со множеством данных. Ключевым свойством, которое объединяет их, выступает однородность данных.
Подробное описание массива
Такое название носит структура данных. С помощью такого объекта можно сохранять компоненты какого-то отдельно взятого типа. Можно представить такой элемент, как перечень ячеек, которые пронумерованы. В каждую из них можно поместить те или иные информационные данные. Имеются в виду, что один элемент информационных данных будет размещен в одну ячейку.
Важно! Зная тот или иной номер, можно получать доступ к отдельно взятой ячейке. Этот номер называется в программной среде индексом.
Если взять конкретно Java, то массив характеризуется таким уникальным свойством, как однородность. Что это означает на практике? Это говорит о том, что во всех его ячейках сохраняются элементы, которые так или иначе принадлежат к единому типу.
Например, массив чисел может отображать исключительно целые числа. Для этого предусматривается разновидность int. Массив строк будет отображать только вложенные в них элементы, то есть в данном случае строки. Если мы создадим массив, состоящий из элементов, например, обозначим их Dog, то массив будет отображать именно эти объекты и никакие другие.
Это означает, что в Java мы не можем поместить целое число в первую ячейку, во вторую — какое-либо другое значение, не имеющее отношение к целым числам, а в третью — элементы типа Dog. Все должно быть однородным.
Способы объявления
Важно объявлять массив в java, как и всякую другую переменную. Существует два ключевых способа, как можно реализовать такое на практике. Надо сказать, что эти варианты являются равноправными, но первый из указанных в наибольшей степени соответствует стилистике java. Второй представляет собой некое наследие, взятое из языка Си.
Многие программисты, которые работали с этим языком, переходили впоследствии на Java. Вот почему был создан специальный, альтернативный способ, который и оставили для их удобства. Посмотрите внимательно таблицу, которая показывает вам вышеназванные способы объявления массива в Java.
Формирование массива
Как и всякий объект, можно сформировать массив, что означает фактически резервирование под него того или иного участка памяти. В этом нам на помощь приходит оператор, носящий название new. Как это все выглядит на практике:
new typeOfArray [length];
Обозначение, которое идёт сразу за оператором, указывает на разновидность массива. Второй термин указывает на количество ячеек, другими словами, соответствующую ему длину. Она может находить выражение в целых числах. Правда, здесь мы лишь выделили участок памяти под этот объект, но не создали связку массива с какой-либо переменной, которая объявлена ранее. Как обычно поступают в таком случае? Сначала следует объявить массив, после чего создают его. Приведем конкретный пример:
int[] myArray; // объявление массива
myArray = new int[10]; // создание, другими словами, мы формируем участок памяти, который целиком и полностью принадлежит 10 элементам, представляющим собой целые числа. Они обозначены, как int.
В рассматриваемом примере у нас появился целый массив чисел. У этих целых чисел имеется конкретное имя, а именно myArray. После этого мы привели сообщение о том, что в структуре присутствует 10 ячеек. Каждая из них будет так или иначе хранить то или иное целое число. Впрочем, намного чаще можно видеть ситуацию, когда создается массив непосредственно после объявления.Делается это посредством сокращенного синтаксиса. Смотрим, как это выглядит:
int[] myArray = new int[10]; // объявление и выделение памяти “в одном флаконе”
Факт! Как только мы создаем массив с помощью вышеуказанного оператора, у нас во всех ячейках формируется значение, установленное по умолчанию.
В нашем примере приводятся численные разновидности. Для них это значение будет составлять 0. Чтобы было понятнее, смотрим, какой результат получаем после проведенной операции:
int[] myArray = new int[10];
Если мы указали значение для численных типов, то для типа boolean он будет соответствовать значению false, тогда как для ссылочных разновидностей актуально будет значение null.
Что получается в итоге? Формируется массив из 10 целых чисел. Каждая из ячеек будет содержать 0, но это будет актуально для тех пор, пока мы не изменим информацию, заложенную в ходе программы.
Варианты длины массива
Как было сказано ранее, количество элементов, под который рассчитан тот или иной объект, называемый массивом, играет роль длины массива. Когда этот показатель создан, изменить его нельзя. То есть это означает, что при наличии 10 элементов массиве, первый из составляющих этого объекта будет соответствовать нулю, тогда как у последнего будет индекс 9.
Существует специальный инструмент, с помощью которого можно получать доступ к показателям длины. В отношении массива за это отвечает переменная length. Посмотрим более подробно, как это будет выглядеть в деталях:
int[] myArray = new int[10]; // создали массив целых чисел на 10 элементов и присвоили ему имя myArray
System.out.println(myArray.length); // вывели в консоль длину массива.
Итоговый вывод программы будет составлять 10.
Процесс инициализации и получения доступа к составляющим
Итак, мы разобрались в нюансах создания массива в Java. Следуя вышеуказанным правилам, мы можем получить массив, в котором будут присутствовать значения, принятые по умолчанию. То есть это будет уже не пустой объект. В случае с целыми числами это будут показатели, равные нулю, если же массив имеет данные ссылочного типа, то в каждой ячейке можно будет заприметить записанную в нём информацию в формате null.
Теперь у нас появился доступ к элементу массива. Что с этим делать? Записываем в него какие-либо информационные данные, значения. Можно также, как альтернатива, перевести его на экран. Возможно и проведение тех или иных манипуляций, операций по индексу объекта.
Инициализацию следует рассматривать, как процесс заполнения теми или иными информационными сведениями. Но это не те данные, которые мы обычно получаем по умолчанию.
Давайте рассмотрим этот процесс на примере. Например, создадим сейчас массив, состоящий из четырёх сезонов. Значения в нём будут записаны в формате строк. Каждая из них будет соответствовать названиям вышеуказанных сезонов. Вот что мы получаем в итоге:
String[] seasons = new String[4]; /* объявили и создали массив. Java выделила память под массив из 4 строк, и сейчас в каждой ячейке записано значение null (поскольку строка — ссылочный тип)*/
seasons[0] = «Winter»; /* в первую ячейку, то есть, в ячейку с нулевым номером мы записали строку Winter. Тут мы получаем доступ к нулевому элементу массива и записываем туда конкретное значение */
seasons[1] = «Spring»; // проделываем ту же процедуру с ячейкой номер 1 (второй)
seasons[2] = «Summer»; // …номер 2
seasons[3] = «Autumn»; // и с последней, номер 3
Теперь в каждой ячейке мы видим названия сезонов и точно не запутаемся в имеющейся информации. Но можно провести немножко по-другому вышеописанную инициализацию. Что мы будем для этого делать? Совместим объявление и инициализацию. Как это будет выглядеть в итоге:
String[] seasons = new String[] {«Winter», «Spring», «Summer», «Autumn»};
New, оператор, о котором мы говорили ранее, можно будет даже опустить при этом. Получим в итоге запись:
String[] seasons = {«Winter», «Spring», «Summer», «Autumn»};
Выведение на экран монитора
На консоль, другими словами, на экран, перевести элементы массива можно, воспользовавшись специализированными инструментами. Ключевым из них выступает цикл for. Есть и другой, который является более коротким. Этот способ предполагает введение массива на экран, но в данном случае попробуем рассмотреть циклический вариант. Он смотрится следующим образом:
String[] seasons = new String {«Winter», «Spring», «Summer», «Autumn»};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
Что получаем по программе в результате занесённых нами по алгоритму данных:
Winter
Spring
Summer
Autumn
Манипуляции с одномерными и многомерными объектами
Допустим, нам не требуется создание массива чисел или строк, а также каких-либо объектов. Представьте на минуту, что захотели создать массив массивов. Возможно ли такое? Java делает это возможным.
Есть одномерный массив, к которому мы уже с вами привыкли. Он обозначается, как int[] myArray = new int[8]. Массив массивов, о котором мы говорим с вами сейчас, называют двумерным. По внешнему виду он напоминает таблицу. В ней присутствуют отдельные компоненты, такие как номер столбца и номер строки. Если вам знакомы азы линейной алгебры, то вы, наверное, скажете, что этот объект напоминает матрицу:
Зачем и с какой целью необходимо создавать такие массивы? С помощью таких объектов допускается программирование таблиц, матриц и любых других объектов, которые имеют сходную по своим особенностям структуру. Представьте, к примеру, поле для игры в шахматы. Для него можно было бы использовать массив 8 на 8. Многомерные вариации массивов могут быть объявлены и сформированы по такому сценарию:
Int[][] myTwoDimentionalArray = new int [8][8];
В общей сложности, такой массив содержит 64 элемента: myTwoDimentionalArray[0][0], myTwoDimentionalArray[0][1], myTwoDimentionalArray[1][0], myTwoDimentionalArray[1][1] и так далее вплоть до myTwoDimentionalArray[7][7]
А потому если мы, к примеру, вообразим себе шахматную доску, то клетка под номером А1 будет представлена, как myTwoDimentionalArray[0][0], а E2 — myTwoDimentionalArray[4][1].
Там, где возможно 2, там возможно и присутствие трех. То есть вы можете создать 1 массив массивов, после этого сформировать массив массивов массивов и так далее.
Факт! Несмотря на возможность создания трехмерных и более массивов, такие объекты редко находят применение.
Как бы там ни было, трехмерный массив потребуется, если вы захотите, например, запрограммировать кубик Рубика.