0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p><a>Массивы в Java</a>используются довольно часто. В этой статье мы поговорим про многомерные (двумерные, трёхмерные) и ассоциативные массивы. И, разумеется, приведём соответствующие примеры.</p>
1
<p><a>Массивы в Java</a>используются довольно часто. В этой статье мы поговорим про многомерные (двумерные, трёхмерные) и ассоциативные массивы. И, разумеется, приведём соответствующие примеры.</p>
2
<p>В первую очередь, рассмотрим пример объявления многомерного массива:</p>
2
<p>В первую очередь, рассмотрим пример объявления многомерного массива:</p>
3
int[][] a = new int[3][4];<p>Итак, перед нами 2-мерный Java-массив, который может включать в себя до 12 элементов типа int:</p>
3
int[][] a = new int[3][4];<p>Итак, перед нами 2-мерный Java-массив, который может включать в себя до 12 элементов типа int:</p>
4
<p>Вы должны помнить, что индексирование массива в Java начинается с нуля, поэтому его первые элементы имеют индекс не 1, а 0.</p>
4
<p>Вы должны помнить, что индексирование массива в Java начинается с нуля, поэтому его первые элементы имеют индекс не 1, а 0.</p>
5
<p>Таким же образом объявляется и 3-мерный (3D) массив:</p>
5
<p>Таким же образом объявляется и 3-мерный (3D) массив:</p>
6
String[][][] personalInfo = new String[3][4][2];<p>Здесь перед нами 3-мерный массив, который может содержать до 24 (3 x 4 x 2) элементов типа String.</p>
6
String[][][] personalInfo = new String[3][4][2];<p>Здесь перед нами 3-мерный массив, который может содержать до 24 (3 x 4 x 2) элементов типа String.</p>
7
<p>Составляющие многомерного массива в Java тоже являются массивами. При этом, в отличие от C/C++, ряды массивов в Java могут быть разной длины.</p>
7
<p>Составляющие многомерного массива в Java тоже являются массивами. При этом, в отличие от C/C++, ряды массивов в Java могут быть разной длины.</p>
8
<h2>Инициализируем двухмерный массив в Java</h2>
8
<h2>Инициализируем двухмерный массив в Java</h2>
9
<p>Давайте посмотрим, как инициализируется многомерный (в нашем случае - двумерный) Java-массив:</p>
9
<p>Давайте посмотрим, как инициализируется многомерный (в нашем случае - двумерный) Java-массив:</p>
10
int[][] a = { {1, 2, 3}, {4, 5, 6, 9}, {7}, };<p>При этом каждый компонент массива будет тоже представлять собой массив, причём с разной длиной:</p>
10
int[][] a = { {1, 2, 3}, {4, 5, 6, 9}, {7}, };<p>При этом каждый компонент массива будет тоже представлять собой массив, причём с разной длиной:</p>
11
<p>Докажем это с помощью кода:</p>
11
<p>Докажем это с помощью кода:</p>
12
class Two2DArray { public static void main(String[] args) { int[][] a = { {1, 2, 3}, {4, 5, 6, 9}, {7}, }; System.out.println("Длина ряда № 1: " + a[0].length); System.out.println("Длина ряда № 2: " + a[1].length); System.out.println("Длина ряда № 3: " + a[2].length); } }<p>Результат будет следующим</p>
12
class Two2DArray { public static void main(String[] args) { int[][] a = { {1, 2, 3}, {4, 5, 6, 9}, {7}, }; System.out.println("Длина ряда № 1: " + a[0].length); System.out.println("Длина ряда № 2: " + a[1].length); System.out.println("Длина ряда № 3: " + a[2].length); } }<p>Результат будет следующим</p>
13
Длина ряда 1: 3 Длина ряда 2: 4 Длина ряда 3: 1<p>Т. к. многомерный массив включает в себя отдельные массивы (a[0], a[1] и a[2]), мы можем задействовать метод length, чтобы определить длину каждого ряда 2-мерного Java-массива.</p>
13
Длина ряда 1: 3 Длина ряда 2: 4 Длина ряда 3: 1<p>Т. к. многомерный массив включает в себя отдельные массивы (a[0], a[1] и a[2]), мы можем задействовать метод length, чтобы определить длину каждого ряда 2-мерного Java-массива.</p>
14
<p>Теперь выведем на экран все элементы двумерного массива, используя циклы:</p>
14
<p>Теперь выведем на экран все элементы двумерного массива, используя циклы:</p>
15
class TwoDArray { public static void main(String[] args) { int[][] a = { {1, -2, 3}, {-4, -5, 6, 9}, {7}, }; for (int i = 0; i < a.length; ++i) { for(int j = 0; j < a[i].length; ++j) { System.out.println(a[i][j]); } } } }<p>Когда надо пройтись по элементам массива, использование цикла for…each - одно из лучших решений. Пример сортировки двухмерного Java-массива мы можем записать посредством цикла for…each таким образом:</p>
15
class TwoDArray { public static void main(String[] args) { int[][] a = { {1, -2, 3}, {-4, -5, 6, 9}, {7}, }; for (int i = 0; i < a.length; ++i) { for(int j = 0; j < a[i].length; ++j) { System.out.println(a[i][j]); } } } }<p>Когда надо пройтись по элементам массива, использование цикла for…each - одно из лучших решений. Пример сортировки двухмерного Java-массива мы можем записать посредством цикла for…each таким образом:</p>
16
class TwoDArray { public static void main(String[] args) { int[][] a = { {1, -2, 3}, {-4, -5, 6, 9}, {7}, }; for (int[] innerArray: a) { for(int data: innerArray) { System.out.println(data); } } } }<p>Запустив этот код, мы увидим итог заполнения двумерного Java-массива:</p>
16
class TwoDArray { public static void main(String[] args) { int[][] a = { {1, -2, 3}, {-4, -5, 6, 9}, {7}, }; for (int[] innerArray: a) { for(int data: innerArray) { System.out.println(data); } } } }<p>Запустив этот код, мы увидим итог заполнения двумерного Java-массива:</p>
17
<h2>Инициализируем 3-мерный массив в Java</h2>
17
<h2>Инициализируем 3-мерный массив в Java</h2>
18
<p>На самом деле, трёхмерный массив инициализируется практически так же, как и двумерный:</p>
18
<p>На самом деле, трёхмерный массив инициализируется практически так же, как и двумерный:</p>
19
// test - 3-мерный массив int[][][] test = { { {1, -2, 3}, {2, 3, 4} }, { {-4, -5, 6, 9}, {1}, {2, 3} } };<p>Трёхмерный Java-массив состоит из 2-мерных массивов. И, разумеется, длина рядов может быть различна.</p>
19
// test - 3-мерный массив int[][][] test = { { {1, -2, 3}, {2, 3, 4} }, { {-4, -5, 6, 9}, {1}, {2, 3} } };<p>Трёхмерный Java-массив состоит из 2-мерных массивов. И, разумеется, длина рядов может быть различна.</p>
20
<p>Давайте напишем программу, выводящую элементы 3-мерного массива посредством циклов:</p>
20
<p>Давайте напишем программу, выводящую элементы 3-мерного массива посредством циклов:</p>
21
class ThreeDArray { public static void main(String[] args) { // test - 3-мерный массив int[][][] test = { { {1, -2, 3}, {2, 3, 4} }, { {-4, -5, 6, 9}, {1}, {2, 3} } }; // цикл for..each проходит по всем элементам 3-мерного массива for (int[][] array2D: test) { for (int[] array1D: array2D) { for(int item: array1D) { System.out.println(item); } } } } }<p>Итог будет следующим:</p>
21
class ThreeDArray { public static void main(String[] args) { // test - 3-мерный массив int[][][] test = { { {1, -2, 3}, {2, 3, 4} }, { {-4, -5, 6, 9}, {1}, {2, 3} } }; // цикл for..each проходит по всем элементам 3-мерного массива for (int[][] array2D: test) { for (int[] array1D: array2D) { for(int item: array1D) { System.out.println(item); } } } } }<p>Итог будет следующим:</p>
22
1 -2 3 2 3 4 -4 -5 6 9 1 2 3<h2>Ассоциативные массивы в Java</h2>
22
1 -2 3 2 3 4 -4 -5 6 9 1 2 3<h2>Ассоциативные массивы в Java</h2>
23
<p>У ассоциативного массива в качестве ключей применяются строки. Мы можем представить его структуру данных в виде совокупности пары "ключ-значение". В таком массиве, как ассоциативный, любое значение связано с конкретным ключом, а доступ к значению производится по имени ключа.</p>
23
<p>У ассоциативного массива в качестве ключей применяются строки. Мы можем представить его структуру данных в виде совокупности пары "ключ-значение". В таком массиве, как ассоциативный, любое значение связано с конкретным ключом, а доступ к значению производится по имени ключа.</p>
24
<p>Что касается языка программирования Java, то в нём ассоциативные массивы не поддерживаются. А ведь в некоторых ситуациях, работая с массивами, было бы неплохо обратиться к элементу не по индексу, а по ключу.</p>
24
<p>Что касается языка программирования Java, то в нём ассоциативные массивы не поддерживаются. А ведь в некоторых ситуациях, работая с массивами, было бы неплохо обратиться к элементу не по индексу, а по ключу.</p>
25
<p>Однако есть способ реализовать похожую структуру данных, используя стандартные средства Java SE. В частности, мы можем создать простейший ассоциативный массив, воспользовавшись классом<strong>HashMap</strong>и установив для его экземпляра строковый тип данных ключа.</p>
25
<p>Однако есть способ реализовать похожую структуру данных, используя стандартные средства Java SE. В частности, мы можем создать простейший ассоциативный массив, воспользовавшись классом<strong>HashMap</strong>и установив для его экземпляра строковый тип данных ключа.</p>
26
<p>Посмотрим, как это работает:</p>
26
<p>Посмотрим, как это работает:</p>
27
HashMap<String, Integer> fruits = new HashMap(); fruits.put("Число апельсинов", 5); fruits.put("Число яблок", 10); fruits.put("Число мандаринов", 7); System.out.println(fruits.get("Число мандаринов"));<p>Мы можем создать ассоциативный массив и с более сложной структурой, поместив объекты HashMap друг в друга и получив тем самым "ассоциативные массивы в ассоциативном массиве". Посмотрим, как это выглядит на практике:</p>
27
HashMap<String, Integer> fruits = new HashMap(); fruits.put("Число апельсинов", 5); fruits.put("Число яблок", 10); fruits.put("Число мандаринов", 7); System.out.println(fruits.get("Число мандаринов"));<p>Мы можем создать ассоциативный массив и с более сложной структурой, поместив объекты HashMap друг в друга и получив тем самым "ассоциативные массивы в ассоциативном массиве". Посмотрим, как это выглядит на практике:</p>
28
HashMap<String, Integer> fruits = new HashMap(); fruits.put("Число апельсинов", 5); fruits.put("Число яблок", 10); fruits.put("Число мандаринов", 7); HashMap<String, Integer> milkProducts = new HashMap(); milkProducts.put("Число пачек творога", 2); milkProducts.put("Число пакетов молока", 3); milkProducts.put("Число банок сметаны", 17); HashMap<String, HashMap<String, Integer> > eat = new HashMap(); eat.put("Фрукты", fruits); eat.put("Молочные продукты", milkProducts); System.out.println(eat.get("Молочные продукты").get("Число пакетов молока"));<p>В результате мы решим проблему отсутствия ассоциативных массивов в Java.</p>
28
HashMap<String, Integer> fruits = new HashMap(); fruits.put("Число апельсинов", 5); fruits.put("Число яблок", 10); fruits.put("Число мандаринов", 7); HashMap<String, Integer> milkProducts = new HashMap(); milkProducts.put("Число пачек творога", 2); milkProducts.put("Число пакетов молока", 3); milkProducts.put("Число банок сметаны", 17); HashMap<String, HashMap<String, Integer> > eat = new HashMap(); eat.put("Фрукты", fruits); eat.put("Молочные продукты", milkProducts); System.out.println(eat.get("Молочные продукты").get("Число пакетов молока"));<p>В результате мы решим проблему отсутствия ассоциативных массивов в Java.</p>
29
<p><em>При подготовке статьи использовались следующие материалы: -<a>Java Multidimensional Arrays</a>; - "<a>Ассоциативные массивы в Java</a>".</em></p>
29
<p><em>При подготовке статьи использовались следующие материалы: -<a>Java Multidimensional Arrays</a>; - "<a>Ассоциативные массивы в Java</a>".</em></p>
30
30