Многомерные массивы в Java
Многомерные массивы представляют собой массивы массивов.
При объявлении переменной многомерного массива для указания каждого дополнительного индекса используется отдельный ряд квадратных скобок. Например:
int[][] twoD = new int[5][4];
Следующий рисунок показывает как можно визуально представить двумерный массив 5 на 4. Левый индекс определяет строку, а правый столбец:
Следующий пример демонстрирует каким образом можно установить значения в двухмерный массив 5x4. Для перебора строк используется внешний цикл for
, для перебора столбцов - внутренний. Каждому следующему элементу присваивается значение на единицу большее чем предыдущее.
public class TwoDArrayExample1 {
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 TwoDArrayExample2 {
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 TwoDArrayExample3 {
public static void main(String[] args) {
double[][] arrayTwoD = {
{0, 1, 2, 3},
{4, 5, 6, 7},
{8, 9, 10, 11},
{12, 13, 14, 15}
};
for (double[] arrayOneD : arrayTwoD) {
for (double element : arrayOneD) {
System.out.print(element + " ");
}
System.out.println();
}
}
}
Презентацию с видео можно скачать на Patreon.
Курс 'Java для начинающих' на Udemy
Зарегистрируйтесь или войдите, чтобы иметь возможность оставить комментарий.