Массив внутри массива java

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

Многомерный массив в Java — это массив, состоящий из массивов разного размера в качестве элементов. Его также называют «массивом массивов», «рваным массивом» или «зубчатым массивом».

В этом кратком руководстве мы более подробно рассмотрим определение многомерных массивов и работу с ними.

2. Создание многомерного массива​

Давайте начнем с рассмотрения способов создания многомерного массива:

2.1. Сокращенная форма​

Простой способ определить многомерный массив:

 int[][] multiDimensionalArr = 1, 2>, 3, 4, 5>, 6, 7, 8, 9>>; 

Здесь мы объявили и инициализировали multiDimensionalArr за один шаг.

2.2. Декларация, а затем инициализация​

Начнем с объявления многомерного массива размера три:

 int[][] multiDimensionalArr = new int[3][]; 

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

Далее, давайте пойдем дальше, объявив и инициализировав соответствующие элементы в multiDimensionalArr :

 multiDimensionalArr[0] = new int[] 1, 2>;  multiDimensionalArr[1] = new int[] 3, 4, 5>;  multiDimensionalArr[2] = new int[] 6, 7, 8, 9>; 

Мы также можем просто объявить его элементы без их инициализации:

 multiDimensionalArr[0] = new int[2];  multiDimensionalArr[1] = new int[3];  multiDimensionalArr[2] = new int[4]; 

Позже их можно будет инициализировать, например, с помощью пользовательского ввода.

Мы также можем использовать метод java.util.Arrays.fill для инициализации элементов массива:

 void initialize2DArray(int[][] multiDimensionalArray)    for (int[] array : multiDimensionalArray)    Arrays.fill(array, 7);   >   > 

Все элементы в массивах инициализируются одним и тем же значением.

3. Представление памяти​

Как будет выглядеть представление в памяти нашего multiDimensionalArr ?

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

Наш multiDimensionalArr в памяти будет выглядеть примерно так:

Ясно, что multiDimensionalArr [0] содержит ссылку на одномерный массив размера 2, multiDimensionalArr[1] содержит ссылку на другой одномерный массив размера 3 и так далее.

Таким образом, Java позволяет нам определять и использовать многомерные массивы.

4. Перебор элементов​

Мы можем перебирать многомерный массив так же, как любой другой массив в Java.

Давайте попробуем повторить и инициализировать элементы multiDimensionalArr , используя пользовательские данные:

 void initializeElements(int[][] multiDimensionalArr)    Scanner sc = new Scanner(System.in);   for (int outer = 0; outer  multiDimensionalArr.length; outer++)    for (int inner = 0; inner  multiDimensionalArr[outer].length; inner++)    multiDimensionalArr[outer][inner] = sc.nextInt();   >   >   > 

Здесь multiDimensionalArr[outer].length — это длина массива по внешнему индексу в multiDimensionalArr .

Это помогает нам гарантировать, что мы ищем элементы только в допустимом диапазоне каждого подмассива , тем самым избегая исключения ArrayIndexOutOfBoundException .

5. Элементы печати​

Что, если мы хотим напечатать элементы нашего многомерного массива?

Одним из очевидных способов было бы использование логики итерации, которую мы уже рассмотрели. Это включает в себя итерацию по каждому элементу в нашем многомерном массиве, который сам является массивом, а затем итерацию по этому дочернему массиву — по одному элементу за раз.

Другой вариант, который у нас есть, — использовать вспомогательный метод java.util.Arrays.toString() :

 void printElements(int[][] multiDimensionalArr)    for (int index = 0; index  multiDimensionalArr.length; index++)    System.out.println(Arrays.toString(multiDimensionalArr[index]));   >   > 

И в итоге мы получаем чистый и простой код. Сгенерированный вывод консоли будет выглядеть так:

6. Длина элементов​

Мы можем найти длину массивов в многомерном массиве, перебирая основной массив:

 int[] findLengthOfElements(int[][] multiDimensionalArray)    int[] arrayOfLengths = new int[multiDimensionalArray.length];   for (int i = 0; i  multiDimensionalArray.length; i++)    arrayOfLengths[i] = multiDimensionalArray[i].length;   >   return arrayOfLengths;   > 

Мы также можем найти длину массивов, используя потоки Java:

 Integer[] findLengthOfArrays(int[][] multiDimensionalArray)    return Arrays.stream(multiDimensionalArray)   .map(array -> array.length)   .toArray(Integer[]::new);   > 

7. Скопируйте двумерный массив​

Мы можем скопировать двумерный массив с помощью метода Arrays.copyOf :

 int[][] copy2DArray(int[][] arrayOfArrays)    int[][] copied2DArray = new int[arrayOfArrays.length][];   for (int i = 0; i  arrayOfArrays.length; i++)    int[] array = arrayOfArrays[i];   copied2DArray[i] = Arrays.copyOf(array, array.length);   >   return copied2DArray;   > 

Мы также можем добиться этого, используя потоки Java:

 Integer[][] copy2DArray(Integer[][] arrayOfArrays)    return Arrays.stream(arrayOfArrays)   .map(array -> Arrays.copyOf(array, array.length))   .toArray(Integer[][]::new);   > 

8. Заключение​

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

Как всегда, исходный код представленных примеров можно найти на GitHub .

Источник

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

В Java можно объявить массив массивов, известный как многомерный массив. К примеру:

Здесь мы видим двухмерный массив 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 :

Каждый компонент массива также представляет собой массив, и длина каждого ряда отличается:

Как инициализировать двумерный массив Java?

Давайте напишем программу, чтобы это доказать:

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 :

Как инициализировать многомерный массив 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

МК Михаил Кузнецов автор-переводчик статьи «

Источник

Читайте также:  keywords
Оцените статью