1. Обзор
Многомерный массив в Java – это массив, содержащий массивы различных размеров в качестве своих элементов. Его также называют “массив массивов”, или “неровный массив”, или “неровный массив”.
В этом кратком руководстве мы более подробно рассмотрим определение многомерных массивов и работу с ними.
2. Создание Многомерного Массива
Давайте начнем с рассмотрения способов создания многомерного массива:
2.1. Стенографическая форма
Простым способом определения многомерного массива было бы:
int[][] multiDimensionalArr = {{1, 2}, {3, 4, 5}, {6, 7, 8, 9}};
Здесь мы объявили и инициализировали многомерный Arr за один шаг.
2.2. Объявление и последующая Инициализация
Мы начнем с объявления многомерного массива третьего размера:
int[][] multiDimensionalArr = new int[3][];
Здесь мы не указали второе измерение, так как оно будет отличаться .
Далее, давайте пойдем дальше, объявив и инициализировав соответствующие элементы в многомерном Arr :
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.Массивы.fill метод инициализации элементов массива:
void initialize2DArray(int[][] multiDimensionalArray) { for (int[] array : multiDimensionalArray) { Arrays.fill(array, 7); } }
Все элементы в массивах инициализируются одним и тем же значением.
3. Представление памяти
Как будет выглядеть представление памяти нашего многомерного Arr ?
Как мы знаем, массив в Java-это не что иное, как объект, элементами которого могут быть либо примитивы, либо ссылки. Таким образом, двумерный массив в Java можно рассматривать как массив одномерных массивов.
Наш многомерный Arr в памяти будет выглядеть примерно так:
Очевидно, что Многомерный Arr [0] содержит ссылку на одномерный массив размера 2, Многомерный Arr[1] содержит ссылку на другой одномерный массив размера 3 и так далее.
Таким образом, Java позволяет нам определять и использовать многомерные массивы.
4. Перебор Элементов
Мы можем перебирать многомерный массив, как и любой другой массив в Java.
Давайте попробуем выполнить итерацию и инициализацию многомерных элементов Arr с использованием пользовательских входных данных:
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(); } } }
Здесь Многомерный Arr[внешний].длина – это длина массива с индексом внешний в многомерном Arr .
Это помогает нам убедиться , что мы ищем элементы только в допустимом диапазоне каждого поддерева , тем самым избегая исключения 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])); } }
И в итоге мы получаем чистый и простой код. Сгенерированный вывод консоли будет выглядеть следующим образом:
[1, 2] [3, 4, 5] [6, 7, 8, 9]
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. Скопируйте 2-D массив
Мы можем скопировать 2-D массив с помощью метода 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 .