Многомерные массивы
Многомерные массивы представляют собой массивы массивов.
При объявлении переменной многомерного массива для указания каждого дополнительного индекса используется отдельный ряд квадратных скобок. Например:
int[][] twoD = new int[5][4];
Следующий рисунок показывает как можно визуально представить двумерный массив 5 на 4. Левый индекс определяет строку, а правый столбец:

Следующий пример демонстрирует каким образом можно установить значения в двухмерный массив 5×4. Для перебора строк используется внешний цикл for , для перебора столбцов — внутренний. Каждому следующему элементу присваивается значение на единицу большее чем предыдущее.
public class TwoDArray1 < public static void main(String[] args) < int[][] twoD = new int[5][4]; int i, j, k = 0; for (i = 0; i < 5; i++) < for (j = 0; j < 4; j++) < twoD[i][j] = k++; System.out.print(twoD[i][j] + " "); >System.out.println(); > > >
Рассмотрим теперь как представлен двумерный массив int[][] twoD = new int[3][4]; в памяти. Переменная twoD указывает не на матрицу, а на строку (красного цвета) состоящую из трех элементов. Значение каждого элемента — это ссылка на строку из четырех элементов (фиолетового цвета).

Следующая картинка показывает каким образом, хранится трехмерный массив int[][][] threeD = new int[3][4][2] в памяти:

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

Посмотрим код, реализующий такой массив. При объявлении двумерного массива необходимо задать количество элементов только для первой размерности — int[][] array = new int[4][] . Таким образом, мы указываем количество строк в массиве, но под каждую строку память не выделяем. Далее выделяем отдельно память под каждую строку массива. Например, строка с индексом ноль будет размера 1 — array[0] = new int[1] .
public class TwoDArray2 < public static void main(String[] args) < int[][] array = new int[4][]; array[0] = new int[1]; array[1] = new int[2]; array[2] = new int[3]; array[3] = new int[4]; int i, j, k = 0; for (i = 0; i < 4; i++) < for (j = 0; j < i + 1; j++) < array[i][j] = k++; System.out.print(array[i][j] + " "); >System.out.println(); > > >
Для многомерных массивов можно также использовать блок для инициализации, если значения всех элементов заранее известны. Каждая отдельная строка заключается в фигурные скобки:
public class TwoDArray3 < public static void main(String[] args) < double[][] arrayTwoD = < , , , >; for (double[] arrayOneD : arrayTwoD) < for (double element : arrayOneD) < System.out.print(element + " "); >System.out.println(); > > >
Презентацию с видео можно скачать на Patreon .
Как создать двумерный массив в java
Для создания двумерного массива в Java нужно определить тип данных элементов массива и указать количество строк и столбцов в массиве.
Вот пример создания двумерного массива в Java :
int[][] matrix = new int[3][4];
В этом примере мы создаем двумерный массив matrix , который содержит 3 строки и 4 столбца. Каждый элемент массива имеет тип int
Можно также создать двумерный массив с помощью оператора инициализации:
int[][] matrix = 1, 2, 3>, 4, 5, 6>, 7, 8, 9>, 10, 11, 12>>;
В этом примере мы создаем двумерный массив matrix размером 4×3 и заполняем его значениями при инициализации.
Многомерные массивы Java
В Java можно объявить массив массивов, известный как многомерный массив. К примеру:
int[][] a = new int[3][4];
Здесь мы видим двухмерный массив Java , который может содержать до 12 элементов типа int :

Не забывайте, что индексирование в Java начинается с нуля, поэтому первые элементы массива имеют индекс 0 , а не 1 .
Аналогично можно объявить и трёхмерный ( 3D ) массив. Например:
String[][][] personalInfo = new String[3][4][2];
В примере выше personalInfo — это трёхмерный массив, в котором может быть до 24 (3*4*2) элементов типа String .
В Java составляющие многомерного массива — это тоже массивы. Если вы знаете C/C++ , то может показаться, что многомерные массивы в Java и C/C++ работают одинаково. Но это не совсем так — в Java ряды массивов могут быть разной длины. Разницу мы увидим во время инициализации.
Как инициализировать двумерный массив Java?
Ниже приводится пример инициализации двумерного массива Java :
int[][] a = < , , , >;
Каждый компонент массива также представляет собой массив, и длина каждого ряда отличается:

Давайте напишем программу, чтобы это доказать:
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; System.out.println("Длина ряда 1: " + a[0].length); System.out.println("Длина ряда 2: " + a[1].length); System.out.println("Длина ряда 3: " + a[2].length); > >
При запуске этой программы мы получим:
Длина ряда 1: 3
Длина ряда 2: 4
Длина ряда 3: 1
Поскольку многомерный массив состоит из отдельных массивов (a[0], a[1] and a[2]) , можно использовать метод length для определения длины каждого ряда длины двумерного массива Java.
Пример: вывод на экран всех элементов двумерного массива с помощью циклов :
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; for (int i = 0; i < a.length; ++i) < for(int j = 0; j < a[i].length; ++j) < System.out.println(a[i][j]); >> > >
Всегда лучше использовать цикл for…each , когда нужно пройти по элементам массива. Пример сортировки двумерного массива Java можно записать с помощью цикла for…each следующим образом:
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; for (int[] innerArray: a) < for(int data: innerArray) < System.out.println(data); >> > >
При запуске этой программы мы получим следующий результат заполнения двумерного массива Java :
1 -2 3 -4 -5 6 9 7
Как инициализировать многомерный массив Java?
Многомерный или трёхмерный массив инициализируется почти так же, как двухмерный:
// test — трёхмерный массив int[][][] test = < < , >, < , , > >;
Трёхмерный массив — это массив, состоящий из двумерных массивов. Как и у двумерных массивов Java , его ряды могут быть различной длины.
Пример: программа для вывода элементов трёхмерного массива с помощью циклов :
class ThreeArray < public static void main(String[] args) < // test – трёхмерный массив int[][][] test = < < , >, < , , > >; // цикл for..each проходит по элементам трёхмерного массива for (int[][] array2D: test) < for (int[] array1D: array2D) < for(int item: array1D) < System.out.println(item); >> > > >
При запуске программы вывода двумерного массива Java получаем следующий результат:
1 -2 3 2 3 4 -4 -5 6 9 1 2 3
МК Михаил Кузнецов автор-переводчик статьи «
Двумерные массивы в Java
Вы уже знаете что такое массивы в Java и как с ними работать?
1. Если ответ «нет» — прочтите сначала статью «Массивы в Java»
2. Если ответ «да» — читайте статью ниже о двумерных массивах.
Поскольку Вы уже знаете что такое массивы и как с ними работать, наверняка, для Вас не проблема:
- создать одномерный массив
- заполнить его значениями
- и вывести в консоль
Например:
class Test <
public static void main ( String [ ] args ) <
int [ ] array = < 51 , 136 , 387 >;
for ( int i = 0 ; i < array . length ; i ++ ) <
System . out . println ( array [ i ] ) ;
Ну, а что же с двумерным массивом?
Самый, наверное, распространенный пример двумерного массива — это матрица. Если кто забыл что такое матрица, напоминаем:

В матрице есть строки и столбцы . На пересечении их стоит определенное значение.

Напоминаем, что счет в массивах начинается с 0 .
— число 1 это пересечение 0 — строки и 0 — столбца
— число 2 это пересечение 0 — строки и 1 — столбца
— число 3 это пересечение 1 — строки и 0 — столбца
— число 4 это пересечение 1 — строки и 1 — столбца
Ниже приводим пример объявления двумерного массива на языке программирования Java:
class Test < public static void main ( String [ ] args ) < int [ ] [ ] array = new int [ 2 ] [ 2 ] ;
Или можно сразу объявить содержимое массива:
class Test < public static void main ( String [ ] args ) < int [ ] [ ] array = < < 1 , 2 >, < 3 , 4 >> ;
При инициализации двумерного массива, можно заметить отличие от обычного массива. В двумерном массиве Вы используете две квадратные скобки вместо одной.
- в первой вы пишите количество строк
- во второй вы пишите количество столбцов
При заполнении двумерного массива Вы указываете в этих скобках строку и столбец.
Например
class Test < public static void main ( String [ ] args ) < int [ ] [ ] array = new int [ 2 ] [ 2 ] ; array [ 0 ] [ 0 ] = 1 ; array [ 0 ] [ 1 ] = 2 ; array [ 1 ] [ 0 ] = 3 ; array [ 1 ] [ 1 ] = 4 ;
А как же вывести двумерный массив в консоль?
Вывод двумерного массива с помощью цикла for сильно отличается от вывода обычного массива (когда используется цикл for).
Чтобы вывести в каждую ячейку двумерного массива значение, не достаточно использовать один цикл for. Необходимо использовать два цикла for, при этом один из них находится в другом.
Почему так?
Ранее упоминалось, что двумерный массив состоит из строк и столбцов. Каждая ячейка такого массива — это пересечение какой-то строки и столбца.
1. Так что первый цикл for перебирает каждую строку двумерного массива (которая содержит какое-то количество столбцов).
2. А второй цикл for перебирает столбцы в этой строке. Таким образом можно заполнить значением каждый элемент двумерного массива.
Например:
class Test < public static void main ( String [ ] args ) < int [ ] [ ] array = new int [ 2 ] [ 2 ] ; array [ 0 ] [ 0 ] = 1 ; array [ 0 ] [ 1 ] = 2 ; array [ 1 ] [ 0 ] = 3 ; array [ 1 ] [ 1 ] = 4 ; for ( int i = 0 ; i < array . length ; i ++ ) < for ( int j = 0 ; j < array [ i ] . length ; j ++ ) < System . out . print ( array [ i ] [ j ] + "\t" ) ; System . out . println ( ) ;
Если Вы запустите данный код на своем компьютере, в консоли Вы увидите:
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Обучаем с нуля. Детальную информацию Вы можете найти у нас на сайте.
- ← Цикл for each в Java
- Преобразование типов в Java →