Многомерные массивы в Java - Вопросы
Всего: 5 вопросов
1. Что такое многомерный массив в Java?
Что такое многомерный массив в Java?
Многомерный массив в Java — это массив, элементами которого являются другие массивы, то есть «массив массивов». Внешний массив хранит ссылки на вложенные массивы, а не единый непрерывный блок памяти-матрицу, как в C/C++. Чаще всего на практике используют двумерные массивы.
2. Как объявить и создать двумерный массив в Java? Что означают левый и правый индексы?
Как объявить и создать двумерный массив в Java? Что означают левый и правый индексы?
Для каждого измерения используется отдельная пара квадратных скобок. Например, массив из 5 строк по 4 столбца создаётся так:
int[][] twoD = new int[5][4];
При обращении twoD[i][j] левый индекс i задаёт строку, а правый индекс j — столбец. Первая (левая) размерность при создании обязательна: запись new int[][4] не компилируется, тогда как new int[4][] допустима.
3. Как двумерный массив хранится в памяти в Java?
Как двумерный массив хранится в памяти в Java?
Переменная двумерного массива указывает не на матрицу, а на внешний массив ссылок. Каждый его элемент — это ссылка на отдельную строку (одномерный массив), которая лежит в куче как самостоятельный объект. Поэтому строки располагаются в памяти независимо друг от друга, могут иметь разную длину и даже быть null. Массив любой размерности хранится по этому же принципу.
4. Что такое зубчатый (jagged) массив и как его создать?
Что такое зубчатый (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[][] и размеры при такой инициализации не нужно.