Java: работаем с массивами

В этой статье вы познакомитесь с Java массивами:

GettyImages-513320112-58dbec6c5f9b584683022f0e

Если программе необходимо работать с несколькими значениями, имеющими одинаковый тип, можно объявить переменную для каждого числа. К примеру, программа, которая выводит числа в лотерее:

int lotteryNumber1 = 16;
int lotteryNumber2 = 32;
int lotteryNumber3 = 12;
int lotteryNumber4 = 23;
int lotteryNumber5 = 33;
int lotteryNumber6 = 20;

Но есть более элегантный способ работать со значениями – их можно просто сгруппировать при помощи массива.

Массив – это контейнер, в котором содержится определённое количество значений конкретного типа данных. В приведённом выше примере числа из лотереи можно сгруппировать в массив int:

int[] lotteryNumbers = {16,32,12,23,33,20};

Расценивайте массив как ряд коробок. Количество коробок в массиве изменить нельзя. В каждой коробке находится значение того же типа данных, что и в остальных коробках. Можно увидеть значение внутри или заменить содержимое коробки другим значением. В контексте массивов такие «коробки» называются элементами.

Объявление и инициализация массива

Оператор объявления массива в Java похож на любую другую переменную. Он содержит тип данных, после которого следует название массива. Единственное отличие заключается в использовании квадратных скобок рядом с типом данных:

int[] intArray;
float[] floatArray; 
char[] charArray;

Приведённые выше операторы объявления сообщают компилятору, что intArrayvariable – это массив целых чисел, floatArrayis – массив чисел с плавающей запятой, а charArrayis – массив символов.

Как и другие переменные, их нельзя использовать до инициализации и установки значения. В случае с массивом указание значения должно определять размер массива:

intArray = new int[10];

Число внутри скобок указывает, сколько элементов содержится в массиве. Приведённый выше код создает массив целых чисел, состоящий из 10 элементов.

Объявление и установку размера массива можно сделать в одном выражении:

float[] floatArray = new float[10];

Массивы не ограничиваются примитивными типами данных. Также можно создавать Java массив строк или объектов:

String[] names = new String[5];

Применение массивов

Как только массив инициализирован, можно задавать элементам значения при помощи индекса. Он определяет позицию каждого элемента внутри массива. Первый элемент занимает позицию 0, второй – 1 и так далее.

Важно отметить, что индекс первого элемента – 0. Обычно путаница возникает тогда, когда начинаешь думать, что раз в массиве 10 элементов, то их индексы будут перечисляться с 1 до 10. Но на самом деле счет идет от 0 до 9. Например, возвращаясь к примеру с лотерей, можно создать массив из 6 элементов, и задать им числа из лотереи:

int[] lotteryNumbers = new int[6];
lotteryNumbers[0] = 16;
lotteryNumbers[1] = 32;
lotteryNumbers[2] = 12;
lotteryNumbers[3] = 23;
lotteryNumbers[4] = 33;
lotteryNumbers[5] = 20;

Сокращённый способ заполнения массива:

int[] lotteryNumbers = {16,32,12,23,33,20};

String[] names = {"John", "James", "Julian", "Jack", "Jonathon"};

Значения каждого элемента перечисляются внутри фигурных скобок. Порядок значений определяет, какое значение будет у каждого элемента, начиная с нулевой позиции.

Чтобы получить значение элемента, используется его индекс:

System.out.println("The value of the first element is " + lotteryNumbers[0]);

Чтобы узнать в Java длину массива, используется поле length:

System.out.println("The lotteryNumbers array has " + lotteryNumbers.length + " elements");

Примечание: распространена ошибка при использовании метода length, когда значение length используется как индексная позиция. Это всегда выдаст ошибку, так как индексные позиции массива 0, в то время как позиция length1.

Многомерные массивы

До сих пор мы говорили лишь об одномерных массивах. Но у массивов может быть и больше одного измерения. Многомерные массивы представляют собой контейнеры, внутри которых находится сразу несколько массивов:

int[][] lotteryNumbers = {{16,32,12,23,33,20},{34,40,3,11,33,24}};

Индекс многомерных массивов содержит два числа:

System.out.println("The value of element 1,4 is " + lotteryNumbers[1][4]);

При этом длина массивов, находящихся внутри многомерного массива Java, не обаятельно должна быть одинаковой:

String[][] names = new String[5][7];

Копируем массив

Чтобы скопировать массив, проще всего использовать arraycopymethod из класса System. Метод принимает пять параметров: исходный массив, позиция в индексе (с которой необходимо начать копирование элементов), новый массив, позиция в индексе для начала вставки и количество копируемых элементов:

public static void arraycopy (Object src, int srcPos, Object dest, int destPos, int length)

В примере мы создаём новый массив, в котором содержатся последние четыре элемента из массива int:

int[] lotteryNumbers = {16,32,12,23,33,20};
int[] newArrayNumbers = new int[4];
System.arraycopy(lotteryNumbers, 2, newArrayNumbers, 0, 4);

Так как массивы имеют фиксированную длину, arraycopymethod позволяет удобно изменять длину массива.

Чтобы лучше познакомиться с массивами, можете прочитать о том, как управлять массивами при помощи класса Arrays. А также о создании в Java динамических массивов (то есть, массивов с нефиксированным количеством элементов) при помощи класса ArrayList.

Перевод статьи “Working With Arrays in Java” был подготовлен дружной командой проекта Сайтостроение от А до Я.