Подтвердить что ты не робот

Java: двумерный массив хранится в порядке столбцов или строк?

В Java, является многомерным массивом, хранящимся в основном столбце или строчном порядке?

4b9b3361

Ответ 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];