Java: A two dimensional array is stored in column-major or row-major order?
在爪哇中,多维数组是以列主或行主顺序存储的吗?
Java没有多维数组。它有数组。例如,
1 | int[][] |
…是一个
因此,Java既不是列主要也不是行主要顺序(但请参阅下面关于如何读取EDCOX1〔3〕),因为当给定数组的条目被存储在连续的内存块中时,这些条目指向的从属数组是对完全分离的、无关的内存块的对象引用。这也意味着Java的数组数组本质上是锯齿状的:在EDCOX1×4中的条目可能指的是一个3个时隙数组,EDCOX1的5个数组中的一个可能指的是一个4个时隙数组,EDCOX1×6可能根本不引用一个数组(它可以有EDCOX1×7),也许EDCOX1×8指的是一个6个时隙数组。
一张图片价值1K-24个字,所有这些:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | +????????+ +????>| 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 | +????????+ |
一旦你知道了这一点,你就会知道(比如说)
在爪哇中,只有一维数组。
二维数组基本上只是一维数组的一维数组。
1 2 3 4 5 6 7 8 9 | int[ ][ ] table; table = new int[3][ ]; table[0] = new int[5]; table[1] = new int[5]; table[2] = new int[5]; |
两者都不。Java中的二维数组是数组引用的数组。它不是线性存储在内存中的。