Java: un tableau à deux dimensions est stocké en ordre majeur ou en rangée?

En Java, un tableau multidimensionnel est-il stocké en ordre majeur ou en grand rang?

Java n’a pas de tableaux multidimensionnels. Il a des tableaux de tableaux. Donc, par exemple,

int[][] 

… est un tableau de int[] (et bien sûr, int[] est un tableau de int ).

Par conséquent, Java n’est ni un ordre colonne-majeur ni un ordre ligne-majeur (mais voir la note ci-dessous sur la façon de lire a[2][3] ), car, bien que les entrées d’un tableau donné soient stockées dans un bloc de mémoire contigu, les tableaux subordonnés les entrées pointent vers sont des références d’objects à des blocs de mémoire totalement indépendants et indépendants. Cela signifie également que les tableaux de tableaux de Java sont insortingnsèquement irréguliers : l’entrée en [0] peut faire référence à un tableau à 3 emplacements, celle en [1] peut faire référence à un tableau à 4 emplacements, [2] peut ne pas faire référence à un tableau. array (il pourrait avoir null ), et peut-être [3] fait référence à un tableau à 6 emplacements.

Une image vaut 1k-24 mots et tout ça:

                          + −−−−−−−− +
                    + −−−−> |  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 |
                          + −−−−−−−− +

Une fois que vous savez cela, vous savez que (par exemple) a[2][3] signifie “Obtenez le tableau référencé par l’entrée à l’index 2 d’ a , puis obtenez l’entrée référencée par l’index 3 de ce tableau subordonné.” Je pense que c’est assez similaire à l’ordre des grandes lignes, mais ce n’est pas tout à fait la même chose.

En Java, vous n’avez que des tableaux à une dimension.

Les tableaux 2D ne sont en principe que des tableaux unidimensionnels.

 int[ ][ ] table; table = new int[3][ ]; table[0] = new int[5]; table[1] = new int[5]; table[2] = new int[5]; 

Ni. Un tableau à deux dimensions en Java est un tableau de références aux tableaux. Il n’est pas stocké linéairement en mémoire.