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

Всего: 5 вопросов

1. 

Что такое многомерный массив в Java?

Многомерный массив в Java — это массив, элементами которого являются другие массивы, то есть «массив массивов». Внешний массив хранит ссылки на вложенные массивы, а не единый непрерывный блок памяти-матрицу, как в C/C++. Чаще всего на практике используют двумерные массивы.

2. 

Как объявить и создать двумерный массив в Java? Что означают левый и правый индексы?

Для каждого измерения используется отдельная пара квадратных скобок. Например, массив из 5 строк по 4 столбца создаётся так:

int[][] twoD = new int[5][4];

При обращении twoD[i][j] левый индекс i задаёт строку, а правый индекс j — столбец. Первая (левая) размерность при создании обязательна: запись new int[][4] не компилируется, тогда как new int[4][] допустима.

3. 

Как двумерный массив хранится в памяти в Java?

Переменная двумерного массива указывает не на матрицу, а на внешний массив ссылок. Каждый его элемент — это ссылка на отдельную строку (одномерный массив), которая лежит в куче как самостоятельный объект. Поэтому строки располагаются в памяти независимо друг от друга, могут иметь разную длину и даже быть null. Массив любой размерности хранится по этому же принципу.

4. 

Что такое зубчатый (jagged) массив и как его создать?

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

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];

Пока строке не выделена память, её ссылка равна null, и обращение к ней вызовет NullPointerException. Для перебора удобно использовать array.length (число строк) и array[i].length (длина конкретной строки), тогда цикл работает для строк любой длины.

5. 

Как инициализировать многомерный массив значениями прямо при объявлении?

Если все значения известны заранее, можно использовать блок инициализации: каждая строка заключается в свои фигурные скобки.

double[][] arrayTwoD = {
        {0, 1, 2, 3},
        {4, 5, 6, 7},
        {8, 9, 10, 11},
        {12, 13, 14, 15}
};

Целочисленные литералы автоматически приводятся к типу double, поэтому массив будет содержать 0.0, 1.0, 2.0 и так далее. Явно указывать new double[][] и размеры при такой инициализации не нужно.

Страница 1 из 1