Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
07 Июн 2022
8 мин
11626

Что такое массивы в Java и как с ними работать

Массив — это набор однотипных элементов, упорядоченных по номерам.

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

Это справедливо и для массивов в программировании — набора однотипных элементов, расположенных в памяти друг за другом. 

Зачем нужны массивы в Java

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

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

С циклами и массивами студентов знакомят в первом блоке курса Skypro «Java-разработчик». Это необходимый минимум теории, чтобы начать писать код. Дальше начнете применять знания на практике, разработаете собственное приложение, которое сможете положить в портфолио. А центр карьеры подскажет, как лучше составить резюме, и подготовит к собеседованию, чтобы найти работу по новой профессии еще до окончания курса.

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

Чтобы начать работу с массивом, первым делом его нужно объявить — как и обычную переменную. Это выглядит так:

double[] myFancyArray;

Идущие подряд открывающая и закрывающая квадратные скобки сообщают компилятору, что переменная — массив. Тип элементов задает стоящий перед скобками оператор. Это может быть любой из поддерживаемых в Java примитивных типов данных, например int, byte, char, название класса или перечисления — enum. В нашем примере массив будет состоять из вещественных чисел.

Допустима форма объявления, где скобки ставят после названия переменной:

double myFancyArray[];

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

Создание массива в Java

После объявления массива его нужно создать. На этом этапе сообщают компилятору необходимый размер. С точки зрения компилятора Java-массив — это объект. Поэтому его, как и объект, создают при помощи ключевого слова new. Общий синтаксис:

new имя_массива[длина_массива];

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

double[] myFancyArray = new double[5];

Или с помощью отдельных операторов:

double[] myFancyArray;
myFancyArray = new double[5];

Чтение и запись элементов

Массив — это пронумерованный набор. Доступ к каждому элементу осуществляют по его номеру (индексу). Нумерация элементов массива начинается с нуля, а не с единицы, поэтому первый элемент массива будет с индексом 0, а последний — «длина_массива — 1». 

Чтение и запись элементов

Нумерация элементов массива

Общий синтаксис оператора доступа к элементу массива:

имя_массива[индекс элемента]

Пример чтения значения элемента:

System.out.println(myFancyArray[3]);

Пример записи значения элемента:

myFancyArray[4] = 1.5;

Инициализация массива в Java

Чтобы выполнять действия, заполните массив нужными значениями — инициализируйте. Сделать это можно несколькими способами.

✔️ Поочередно записывать значения в каждый элемент массива:

myFancyArray[0] = 0.5;
myFancyArray[1] = 1.0;
myFancyArray[2] = 1.5;
myFancyArray[3] = 2.0;

✔️ С помощью цикла:

for (int i=0; i<5; i++) {
    myFancyArray[i] = i * 2;
}

✔️ Когда создаете массив:

double[] myFancyArray = new double[] {0.5, 1.0, 1.5, 2.0};

или без new:

double[] myFancyArray = {0.5, 1.0, 1.5, 2.0};

Длина массива

Не нужно указывать длину массива при инициализации в момент объявления. Компилятор выведет ее из количества значений в выражении.

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

Немного упростит операцию статический метод arraycopy из утилитарного класса System.Синтаксис метода:

System.arraycopy(src, srcPos, dest, destPos, length);

Где:

src — старый массив;

srcPos — позиция в старом массиве, с которой начинают чтение;

dest — новый массив;

destPos — позиция в новом массиве, с которой начинают запись;

length — количество элементов, которые надо прочитать из старого массива.

Так увеличивают длину массива:

double[] values = new double[2];
values[0] = 1.0;
values[1] = 1.5;

double[] tmpValues = new double[3];
System.arraycopy(values, 0, tmpValues, 0, values.length);
values = tmpValues;

Чтобы узнать длину массива, прочитайте значение переменной length, ассоциированной с ним:

int arrayLength = myFancyArray.length;
System.out.printLn(arrayLength);

Значение длины поможет в работе с циклом for:

double[] myFancyArray = new double[5];
for (int i = 0; i < myFancyArray.length; i++) {
    myFancyArray[i] = i * 2;
}

В Skypro на курсе «Java-разработчик» вы научитесь писать программы для игр и приложений, освоите все нужные инструменты: Git, GitHub, Docker, Swagger, PostgreSQL и другие. Потренируетесь под руководством опытных наставников и соберете сильное портфолио. На курсе действует гарантия трудоустройства: поможем вам найти работу или вернем деньги за курс.

Вывод массива

Удобно пользоваться оператором цикла for:

String[] weekDays = {“Понедельник”, “Вторник”, “Среда”, “Четверг”, “Пятница”, “Суббота”, “Воскресенье”};
for (int i = 0; i < weekDays.length; i++) {
System.out.println(weekDays[i]);
}

В версиях Java после 1.6 доступен оператор foreach:

String[] weekDays = {“Понедельник”, “Вторник”, “Среда”, “Четверг”, “Пятница”, “Суббота”, “Воскресенье”};
for (String weekDay: weekDays) {
System.out.println(weekDay);
}

В Java после версии 1.8 появились Stream API — стримы, которые тоже упрощают работу. Преобразовать массив в стрим поможет статический метод stream в утилитарном классе Arrays.

String[] weekDays = {“Понедельник”, “Вторник”, “Среда”, “Четверг”, “Пятница”, “Суббота”, “Воскресенье”};
Arrays.stream(weekDays).forEach(weekDay ->
System.out.println(weekDay)
);
Вывод массива

Результат вывода массива

Одномерные и многомерные Java-массивы

Типом элемента массива может быть любой тип данных, который поддерживает язык программирования. В случае с Java тип элемента — объект. Массив — это тоже объект. Поэтому ничто не мешает объявить в качестве переменной массив массивов:

double[][] myMatrixArray;

Такой массив называют двумерным, или матрицей. Простой же массив, где элемент — не другой массив, считают одномерным. Структуру двумерного массива можно представить в виде таблицы:

Одномерные и многомерные Java-массивы

Двумерный массив

Вы получите доступ к элементу такого массива, если укажете номер строки и столбца этой таблицы:

myMatrixArray[i][j] = 3.4;

i — номер строки, а j — номер столбца

При этом выражение myMatrixArray.length вернет количество строк в таблице. А с помощью выражения myMatrixArray[0].length получите количество столбцов в строке.

Объявляют двумерный массив, в котором элементы опять будут массивом, так:

double[][][] myCubeArray;

Такой массив называют трехмерным, или кубом. Для доступа к элементу укажите уже три индекса. 

Можно объявлять и четырех-, пяти- и десятимерные массивы. Максимальное количество измерений ограничено спецификацией Java — 255. Это объявление переменной выдаст ошибку компиляции:

double[][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][]
      [][][][][][][][][][][][][][][][] myUberArray;

Ошибка появится, потому что количество измерений объявленного массива равно 256.

Нарушение компиляции

Ошибка компиляции при попытке объявить массив, у которого слишком много измерений

Методы для работы с массивами

Стандартная библиотека Java предоставляет набор методов, которые помогают работать с массивами. Они представлены как статические методы в утилитарном классе Arrays.

🚀 Преобразование к строке

Чтобы вывести массив на печать, воспользуйтесь методом Arrays.toString(a). Он преобразует массив в строку со значениями всех элементов массива, разделенных запятой. Начало и конец будут обозначены квадратными скобками.

Пример:

int[] myArray = new int[] {4, 3, 5, 6};
System.out.println(Arrays.toString(myArray));
Методы для работы с массивами

Результат преобразования массива к строке

🚀 Сортировка

Arrays.sort(a) отсортирует массив a в порядке возрастания значений элементов. Если нужно отсортировать в другом порядке, воспользуйтесь методом Arrays.sort(a, Comparator c), где Comparator c — экземпляр класса Comparator, который позволяет сравнивать два соседних элемента.

Пример:

int[] myArray = new int[] { 6, 4, 3, 5 };
Arrays.sort( myArray );
System.out.println( Arrays.toString( myArray ) );
Методы для работы с массивами

Результат сортировки массива

🚀 Заполнение

Чтобы заполнить массив одинаковыми значениями и не писать цикл, воспользуйтесь методом Arrays.fill(a, val). Он присвоит всем элементам массива a значение val

Можно заполнить не весь массив, а только какую-то его часть: Arrays.fill(a, from, to, val). Метод присвоит элементам массива a значение val, начиная с элемента с индексом from и заканчивая элементом с индексом to-1.

Пример:

int[] myArray = new int[ 10 ];
Arrays.fill( myArray, 7 );
System.out.println( Arrays.toString( myArray ) );
Методы для работы с массивами

Результат заполнения массива значением 7

Стандартная библиотека Java предоставляет и другие методы работы. Изучайте их в документации класса Arrays.

Главное о массивах в Java

  • Массив — набор однотипных элементов, расположенных друг за другом. Доступ к ним осуществляют по порядковому номеру.
  • Длину массива задают во время его создания. После изменить длину уже не получится — нужно создавать новый и копировать значения старого.
  • В Java можно объявлять массивы, элементами которых тоже будут массивы.  Одномерные массивы Java — это когда элемент не другой массив.
  • Стандартная библиотека Java предоставляет большой набор методов, которые упрощают работу. Например, позволяют отсортировать массив, заполнить одинаковыми значениями, преобразовать к строке.

Освойте Java в онлайн-университете профессий Skypro. Изучите теорию в формате понятных текстовых шпаргалок и 40-минутных видеоуроков. Получите много практики в среде коммерческой разработки и два проекта в портфолио. Преподаватели — эксперты в области Java-разработки. Научат думать как разработчик, а не просто копировать и вставлять код.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий