Java:二维数组以列主要或行主要顺序存储?

时间:2011-07-08 21:59:50

标签: java memory multidimensional-array performance

在Java中,是一个以列主要或行主要顺序存储的多维数组吗?

3 个答案:

答案 0 :(得分:67)

Java没有多维数组。它有数组数组。例如,

int[][]

...是int[]的数组(当然int[]是一个int数组。

因此,Java既不是列主要顺序也不是行主顺序(但请参阅下面有关如何读取a[2][3]的说明),因为当给定数组的条目存储在连续的内存块中时,从属数组这些条目指向对象引用完全独立的,不相关的内存块。这也意味着Java的数组数组本质上是锯齿状[0]处的条目可能指的是3插槽数组,[1]处的数组可能指的是4插槽阵列,[2]可能根本不引用数组(它可能有null),也许[3]指的是6个插槽的数组。

一张图片价值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上的条目所引用的数组,然后获取index {引用的条目这个从属数组的{1}}。“我认为它与行主要订单非常相似,但它并不完全相同。

答案 1 :(得分:4)

在Java中,您只有一维数组。

2D数组基本上只是一维数组的一维数组。

int[ ][ ] table;

table = new int[3][ ];

table[0] = new int[5];

table[1] = new int[5];

table[2] = new int[5];

答案 2 :(得分:2)

都不是。 Java中的二维数组是对数组的引用数组。它没有线性存储在内存中。