Java: ¿una matriz bidimensional se almacena en orden column-major o row-major?
memory multidimensional-array (3)
En Java, solo tienes matrices de una dimensión.
Las matrices 2D son básicamente matrices unidimensionales de matrices unidimensionales.
int[ ][ ] table;
table = new int[3][ ];
table[0] = new int[5];
table[1] = new int[5];
table[2] = new int[5];
En Java, ¿se almacena una matriz multidimensional en orden de columna principal o fila principal?
Java no tiene matrices multidimensionales. Tiene matrices de matrices. Entonces, por ejemplo,
int[][]
... es una matriz de int[]
(y por supuesto int[]
es una matriz de int
).
En consecuencia, Java no es una columna principal ni una fila principal (pero vea la nota a continuación sobre cómo leer a[2][3]
), porque mientras las entradas de una matriz determinada se almacenan en un bloque contiguo de memoria, las matrices subordinadas Las entradas señalan que son referencias de objetos a bloques de memoria completamente separados y no relacionados. Esto también significa que las matrices de arrays de Java son irregularmente irregulares : la entrada en [0]
podría referirse a una matriz de 3 ranuras, la de [1]
podría referirse a una matriz de 4 ranuras, [2]
podría no referirse a una array en absoluto (podría tener null
), y tal vez [3]
refiere a una matriz de 6 ranuras.
Una imagen vale 1k-24 palabras y todo eso:
+−−−−−−−−+ +−−−−>| 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 | +−−−−−−−−+
Una vez que lo sepa, sabrá que (por ejemplo) a[2][3]
significa "Obtener la matriz a la que hace referencia la entrada en el índice 2
de a
, luego obtener la entrada a la que hace referencia el índice 3
de esa matriz subordinada". Pienso que es bastante similar al orden mayor de fila, pero no es lo mismo.
Ninguno. Una matriz bidimensional en Java es una matriz de referencias a matrices. No está almacenado linealmente en la memoria.