W3docs

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 zero

Ou 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 50

grid[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 exists

Il 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};
Avertissement
Après 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

java— editable, runs on the server

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.

Pratique

Pratique
Que représente grid[0] pour un int[][] grid ?
Que représente grid[0] pour un int[][] grid ?
Was this page helpful?