Что такое массивы в Java и как с ними работать
Массив — это набор однотипных элементов, упорядоченных по номерам.
Анастасия Хамидулина
Автор статьи
7 июня 2022 в 14:40
В жизни мы часто сталкиваемся с массивами — например, жилыми или лесными. То есть совокупностью множества однородных предметов. Чтобы разделять элементы, им иногда присваиваются номера: в жилом массиве после названия улицы идет номер дома, корпуса.
Это справедливо и для массивов в программировании — набора однотипных элементов, расположенных в памяти друг за другом.
Зачем нужны массивы в 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];
Станьте Java-разработчиком в два раза быстрее
Ускоренный курс для тех, кто хочет быстрее перейти на удаленку

Чтение и запись элементов
Массив — это пронумерованный набор. Доступ к каждому элементу осуществляют по его номеру (индексу). Нумерация элементов массива начинается с нуля, а не с единицы, поэтому первый элемент массива будет с индексом 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
✔️ Когда создаете массив:
double[] myFancyArray = new double[] ;
или без new:
double[] myFancyArray = ;
Длина массива
Не нужно указывать длину массива при инициализации в момент объявления. Компилятор выведет ее из количества значений в выражении.
❗ Важно: когда вы создадите массив, изменить длину уже не получится. Если захотите, чтобы массив был длиннее, придется создать новый и скопировать в него значения старого. Затем присвоить переменной значение нового массива.
Немного упростит операцию статический метод 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
Вывод массива
Удобно пользоваться оператором цикла for:
String[] weekDays = ; for (int i = 0; i
В версиях Java после 1.6 доступен оператор foreach:
String[] weekDays = ; for (String weekDay: weekDays)
В Java после версии 1.8 появились Stream API — стримы, которые тоже упрощают работу. Преобразовать массив в стрим поможет статический метод stream в утилитарном классе Arrays.
String[] weekDays = ; Arrays.stream(weekDays).forEach(weekDay -> System.out.println(weekDay) );

Результат вывода массива
Одномерные и многомерные Java-массивы
Типом элемента массива может быть любой тип данных, который поддерживает язык программирования. В случае с Java тип элемента — объект. Массив — это тоже объект. Поэтому ничто не мешает объявить в качестве переменной массив массивов:
double[][] myMatrixArray;
Такой массив называют двумерным, или матрицей. Простой же массив, где элемент — не другой массив, считают одномерным. Структуру двумерного массива можно представить в виде таблицы:

Вы получите доступ к элементу такого массива, если укажете номер строки и столбца этой таблицы:
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[] ; 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.
Вывод массива на экран
Задача вроде как проста, но решение по какой-то причине не проходит. Звучит задача так:
Создайте метод static void printArray(int[] arr), который принимает массив целых чисел и выводит их в консоль, каждое с новой строки.
Пример ввода: [2,4,6]
Пример вывода:
2
4
6
Требования:
1. Метод должен принимать массив целых чисел
2. Метод не должен ничего возвращать
3. Метод должен выводить каждое число с новой строки
У меня получился такой код:
1 2 3 4 5 6 7 8 9 10
public class Task_1_9_2 { public static void main(String[] args){ int[] arr = new int[] {6, 40, 3}; printArray(arr); } static void printArray(int[] arr){ System.out.println(arr[0] + "\n" + arr[1] + "\n" + arr[2]); } }
В IntelliJ IDEA все работает, выводятся числа массива по одной на строке.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вывод массива чисел на экран
Есть массив, при открытии программы пользователю предлагают выбрать кол-во элементов массива, потом.

вывод на экран случайного одномерного массива,ввод с клавиатуры одномерного массива и вывод его на экран.и все это в одной проге.как это сделать?
надо чтобы при запуске прграммы в паскале сначала вывелся на кран одномерный случайный массив,потом.

Формирование и вывод на экран одномерного массива, состоящего из полусумм строк двумерного массива
:gsorry:помогите. Составьте программу формирования и вывода на экран одномерного.
создание массива и вывод на экран массива из последовательных чисел от 0 до n
создание массива и вывод на экран массива из последовательных чисел от 0 до n
![]()
3638 / 2970 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
Как быть, если в массиве 100 чисел?
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 874
Fischerski, я бы помогла, но с вашим чудо-терминалом лучше не связываться
132 / 126 / 85
Регистрация: 13.09.2013
Сообщений: 485
Думается мне, что задача находится в разделе циклов. И этот самый цикл тут неплохо было бы применить
1. Задача — вывести таблицу умножения.
2. .
3.
1 2 3 4
System.out.println("2*2="+4); System.out.println("2*3="+6); System.out.println("2*4="+8); .
3540 / 2144 / 566
Регистрация: 02.09.2015
Сообщений: 5,435
1 2 3 4 5 6 7 8 9 10 11
import java.util.Arrays; public class Main { public static void main(String[] args) { printArray(new int[]{2, 4, 6}); } static void printArray(int[] arr) { Arrays.stream(arr).forEach(System.out::println); } }
2495 / 1944 / 486
Регистрация: 17.02.2014
Сообщений: 9,238
Fischerski, сколько хочешь, столько и задаешь
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
public class Helper { public static void main(String[] args) { int [] arrayInt = {1,2,3,4,5}; System.out.println(getArrayAsSpatialString(arrayInt, 2)); System.out.println(getArrayAsSpatialString(arrayInt, 3)); System.out.println(getArrayAsSpatialString(arrayInt, 1)); } static String getArrayAsSpatialString(int[] arr, int lenhthStr){ StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i arr.length; i++) { if ((i + 1) % lenhthStr == 0) stringBuilder.append(arr[i]).append('\n'); else stringBuilder.append(arr[i]).append(','); } return stringBuilder.toString(); } }
Кликните здесь для просмотра всего текста
1,2
3,4
5,
1,2,3
4,5,
1
2
3
4
5
Регистрация: 29.09.2014
Сообщений: 22
alicesmagic, В той задаче все было правильно, за исключением модификатора доступа public, все методы кроме main разумеется должны были задаваться без модификатора доступа public, то есть модификатор доступа по умолчанию.
Добавлено через 3 минуты
У меня получилось такое решение:
1 2 3 4 5 6 7 8 9 10 11
public class Task_1_9_2 { public static void main(String[] args){ int[] arr = new int[] {6, 40, 3, 45, 545, 23}; printArray(arr); } static void printArray(int[] arr){ for(int i : arr) { System.out.println(i); } } }
Цикл For — Java: Массивы
Работа с массивами почти всегда завязана на одновременную обработку всех его элементов. Это нужно при выводе списков на экран, при выполнении различных расчетов или проверке данных. Во всех этих случаях нужен механизм для перебора элементов массива. Самый простой способ сделать это – использовать цикл.
Обход
Циклы напрямую с массивами не связаны, но у циклов есть счетчик, который может выступать в качестве индекса массива. Поэтому соединить их не составляет никакого труда:
// Создаем массив String[] userNames = "petya", "vasya", "evgeny">; // Определяем цикл // Начальное значение счетчика var i = 0 – вычисляется один раз перед началом выполнения // Условие остановки i < userNames.length – выполняется перед каждой итерацией// Изменение счетчика i += 1 – выполняется после каждой итерации for (var i = 0; i userNames.length; i++) // Этот код выполняется для каждого элемента System.out.println(userNames[i]); > // => "petya" // => "vasya" // => "evgeny"
В данном коде создаем массив из трех элементов — имен. Далее в цикле обходим массив и выводим на экран все имена так, что каждое имя оказывается на новой строке ( System.out.println() автоматически делает перевод строки).
Рассмотрим этот этап подробнее. При обходе массива циклом for счетчик, как правило, играет роль индекса в массиве. Он инициализируется нулем и увеличивается до userNames.length — 1 , что соответствует индексу последнего элемента. Именно поэтому мы используем строгое сравнение < (меньше) в условном выражении i < userNames.length , а не меньше либо равно).
А что, если нам нужно вывести значения в обратном порядке? Для этого есть два способа. Один — идти в прямом порядке, то есть от нулевого индекса до последнего, и каждый раз вычислять нужный индекс по такой формуле размер массива — 1 — текущее значение счетчика .
String[] userNames = "petya", "vasya", "evgeny">; for (var i = 0; i userNames.length; i++) var index = userNames.length - 1 - i; System.out.println(userNames[index]); // Можно даже так // var userName = userNames[userNames.length - 1 - i]; // System.out.println(userName); > // => "evgeny" // => "vasya" // => "petya"
Другой способ подразумевает обход в обратном порядке, от верхней границы до нижней, то есть от последнего индекса массива к первому (нулю, так как индексирование начинается с нуля). В такой ситуации код меняется на следующий:
String[] userNames = "petya", "vasya", "evgeny">; // Начальное значение i соответствует последнему индексу в массиве for (var i = userNames.length - 1; i >= 0; i--) System.out.println(userNames[i]); > // => "evgeny" // => "vasya" // => "petya"
При таком обходе проверка остановки должна быть именно на >= , иначе элемент с индексом 0 не попадет в цикл.
Изменение
Во время обхода массива его можно не только читать, но и модифицировать. Предположим, что перед нами стоит задача нормализации списка электронных адресов — например, приведение их к нижнему регистру. Тогда код будет выглядеть так:
import java.util.Arrays; String[] emails = "VASYA@gmAil.com", "iGoR@yandex.RU", "netiD@hot.CoM">; System.out.println(Arrays.toString(emails)); // => [VASYA@gmAil.com, iGoR@yandex.RU, netiD@hot.CoM] for (var i = 0; i emails.length; i++) var email = emails[i]; var normalizedEmail = email.toLowerCase(); // Заменяем значение emails[i] = normalizedEmail; > System.out.println(Arrays.toString(emails)); // => [vasya@gmail.com, igor@yandex.ru, netid@hot.com]
Ключевая строчка: emails[i] = normalizedEmail; . В ней происходит перезапись элемента под индексом i .
Итого
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Распечатать массив в Java
Напишите программу для печати одномерных и многомерных массивов на Java.
Как печатать одномерные массивы?
1. Цикл for или расширенный цикл for
Наивным подходом будет использование цикла for, как показано ниже:
class Main
public static void main ( String [ ] args )
for ( int i = 0 ; i < arr . length ; i ++ ) <
System . out . println ( arr [ i ] ) ;
Мы можем заменить приведенный выше цикл for улучшенным циклом for, как показано ниже:
class Main
public static void main ( String [ ] args )
for ( int value : arr ) <
System . out . println ( value ) ;
2. Arrays учебный класс — toString() или же deepToString() метод
Другим простым решением было бы просто использовать Arrays.toString(Object[] a) метод, который вернет строковое представление содержимого указанного массива. Мы также можем использовать Arrays.deepToString(Object[] a) который возвращает строковое представление “глубокого содержимого” указанного массива, т. е. если массив содержит в качестве элементов другие массивы, строковое представление включает их содержимое и т.д.
import java . util . Arrays ;
class Main
public static void main ( String [ ] args )
Integer [ ] arr = < 1 , 2 , 3 , 4 , 5 >;
System . out . println ( Arrays . toString ( arr ) ) ;
System . out . println ( Arrays . deepToString ( arr ) ) ;
результат:
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
3. Apache Commons Lang – ArrayUtils.toString() метод
Arrays.toString() а также Arrays.deepToString() будет работать только на Java SE 5 и выше. Apache Commons предоставляет ArrayUtils.toString() метод, аналогичный Arrays.deepToString() и выводит массив в виде строки. Ниже приведены его отличия от Arrays.deepToString() :
- Строковое представление элементов массива заключено в фигурные скобки. <> в отличие от квадратных скобок [] .
- Соседние элементы разделяются только запятой (а не пробелом).
- Предусмотрена поддержка печати многомерных массивов.
import org . apache . commons . lang3 . ArrayUtils ;
class Main
public static void main ( String [ ] args )
System . out . println ( ArrayUtils . toString ( arr ) ) ;
4. Поток Java 8
В Java SE 8 и выше мы можем использовать потоки для печати массива. Ниже приведены две терминальные операции, которые мы можем применить к потоку для печати массива.
- Получить итератор в поток Iterator itr = Arrays.stream(arr).iterator(); .
- С использованием Stream.forEach
Arrays.stream(arr).forEach(System.out::println); .
Следующая программа демонстрирует это:
import java . util . Arrays ;
class Main
public static void main ( String [ ] args )
Arrays . stream ( arr ) . forEach ( System . out :: println ) ;
5. Arrays.asList() или Guava Ints.asList()
Для массива непримитивных объектов мы можем использовать Arrays.asList() как показано ниже: Arrays.asList() возвращает список фиксированного размера, поддерживаемый указанным массивом. Этот подход не рекомендуется, так как он включает создание списка в качестве промежуточного шага.
Похожий на Arrays.asList() метод в JDK, библиотека Google Guava имеет Ints.asList() который также возвращает список фиксированного размера.
