Tableaux multidimensionnels en Java
Travaillez avec des tableaux à deux dimensions et plus en Java, y compris les tableaux irréguliers (jagged arrays).
Java ne possède pas réellement de type « tableau 2D » distinct. Ce qu'il propose, ce sont des tableaux de tableaux — un int[][] est un tableau dont les éléments sont eux-mêmes des int[]. La syntaxe est suffisamment concise pour ressembler à une grille intégrée, et la plupart du temps vous pouvez l'utiliser ainsi. Si vous débutez avec les bases, commencez par les tableaux Java ; cette page s'appuie sur ceux-ci, dimension par dimension.
Cette page couvre la déclaration et l'allocation des tableaux 2D, la lecture et l'écriture de cellules, l'obtention du nombre de lignes et de colonnes, l'itération, les tableaux irréguliers (non rectangulaires) et le cas rare des dimensions supérieures.
Déclarer un tableau 2D
Ajoutez une paire de crochets supplémentaire au type :
int[][] grid;
String[][] board;Allouez avec deux tailles — les lignes d'abord, puis les colonnes :
int[][] grid = new int[3][4]; // 3 rows, 4 columns, all zeroOu utilisez un littéral imbriqué :
int[][] grid = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};Les accolades externes contiennent trois sous-tableaux, chacun de longueur 4.
Accéder aux éléments
Deux index : la ligne d'abord, puis la colonne.
int[][] grid = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
System.out.println(grid[0][0]); // 1
System.out.println(grid[2][1]); // 8
grid[1][1] = 50; // replace 5 with 50grid[0] seul correspond à la première ligne — elle-même un int[] de longueur 3. C'est l'essentiel à intégrer : indexer une fois donne une ligne, indexer deux fois donne une cellule.
length pour les lignes et les colonnes
grid.length est le nombre de lignes. grid[r].length est le nombre de colonnes dans la ligne r :
int rows = grid.length;
int cols = grid[0].length; // assuming row 0 existsIl n'existe pas de grid.cols au niveau supérieur car Java ne suppose pas que chaque ligne a la même longueur — voir les tableaux irréguliers ci-dessous.
Itérer
La double boucle for standard :
for (int r = 0; r < grid.length; r++) {
for (int c = 0; c < grid[r].length; c++) {
System.out.print(grid[r][c] + " ");
}
System.out.println();
}Ou avec le for amélioré, en traitant chaque ligne comme un int[] :
for (int[] row : grid) {
for (int cell : row) {
System.out.print(cell + " ");
}
System.out.println();
}Utilisez la forme améliorée quand les coordonnées ne vous intéressent pas, et la forme classique quand elles vous importent.
Tableaux irréguliers
Les tableaux internes n'ont pas besoin d'avoir la même longueur. Un tableau de tableaux en Java peut être irrégulier — chaque ligne dimensionnée indépendamment :
int[][] triangle = new int[4][]; // 4 rows, columns unspecified
triangle[0] = new int[]{1};
triangle[1] = new int[]{1, 2};
triangle[2] = new int[]{1, 2, 3};
triangle[3] = new int[]{1, 2, 3, 4};new int[4][], chaque ligne est null tant qu'on ne lui affecte pas un tableau. Accéder à triangle[0][0] avant triangle[0] = ... lève une NullPointerException, et non une ArrayIndexOutOfBoundsException. Avec la forme new int[3][4] complètement dimensionnée, toutes les lignes sont créées et initialisées à zéro automatiquement.Ou avec un littéral :
int[][] triangle = {
{1},
{1, 2},
{1, 2, 3},
{1, 2, 3, 4}
};L'itération fonctionne exactement de la même façon — on demande à chaque ligne sa propre .length :
for (int r = 0; r < triangle.length; r++) {
for (int c = 0; c < triangle[r].length; c++) {
System.out.print(triangle[r][c] + " ");
}
System.out.println();
}C'est pourquoi int[][] est un « tableau de tableaux » plutôt qu'une véritable matrice : rien dans le langage n'oblige chaque ligne à avoir la même largeur.
Dimensions supérieures
Le principe s'étend. int[][][] est un tableau de tableaux de tableaux — utile pour une grille 3D, une pile de matrices, une image RGB (hauteur × largeur × 3) :
int[][][] cube = new int[2][3][4]; // 2 × 3 × 4
cube[0][1][2] = 99;En pratique, tout ce qui dépasse 2D est rare dans un code Java idiomatique — à ce stade, une classe avec des champs nommés est presque toujours plus claire.
Un exemple concret
La suite
Vous avez maintenant vu les tableaux en une et plusieurs dimensions. Ensuite, nous examinerons les opérations courantes sur les tableaux — obtenir la longueur, remplir, rechercher, copier — ainsi que les utilitaires de la bibliothèque standard qui en font des appels en une seule ligne pour la plupart.