В Java, является многомерным массивом, хранящимся в основном столбце или строчном порядке?
Java: двумерный массив хранится в порядке столбцов или строк?
Ответ 1
В Java нет многомерных массивов. Он имеет массивы массивов. Так, например,
int[][]
... является массивом int[]
(и, конечно, int[]
является массивом int
).
Следовательно, Java не является ни основным столбцом, ни строковым порядком (но см. примечание ниже о том, как читать a[2][3]
), поскольку, если данные в массиве хранятся в непрерывном блоке памяти, подчиненные массивы выполняют эти записи точка - это ссылки на объекты, полностью разделенные, не связанные блоки памяти. Это также означает, что массивы Java массивов по сути зазубрены: запись в [0]
может относиться к 3-слотовому массиву, то в [1]
может относиться к массиву с 4 слотами, [2]
может не ссылаться на массив (он может иметь null
), и, возможно, [3]
относится к массиву с шестью слотами.
Изображение стоит 1k-24 слова и все что:
+−−−−−−−−+ +−−−−>| int[] | +−−−−−−−−−−−+ | +−−−−−−−−+ | int[][] | | | 0: int | +−−−−−−−−−−−+ | | 1: int | | 0: int[] |−−−−−−+ | 2: int | | 1: int[] |−−−−−−+ +−−−−−−−−+ | 2: null | | | 3: int[] |−−+ | +−−−−−−−−+ +−−−−−−−−−−−+ | +−−−−>| int[] | | +−−−−−−−−+ | | 0: int | | | 1: int | | | 2: int | | | 3: int | | +−−−−−−−−+ | | +−−−−−−−−+ +−−−−−−−−−| int[] | +−−−−−−−−+ | 0: int | | 1: int | | 2: int | | 3: int | | 4: int | | 5: int | +−−−−−−−−+
Как только вы это знаете, вы знаете, что (скажем) a[2][3]
означает "Получить массив, на который ссылается запись в индексе 2
a
, затем получить запись, на которую ссылается индекс 3
этого подчиненного массива". Я думаю, что это довольно похоже на порядок строк, но это не совсем то же самое.
Ответ 2
Ни. Двумерный массив в Java представляет собой массив ссылок на массивы. Он не сохраняется линейно в памяти.
Ответ 3
В Java у вас есть только одномерные массивы.
2D-массивы представляют собой в основном одномерные массивы одномерных массивов.
int[ ][ ] table;
table = new int[3][ ];
table[0] = new int[5];
table[1] = new int[5];
table[2] = new int[5];