java memory multidimensional-array performance

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.