Java Language Tableaux multidimensionnels et dentelés


Exemple

Il est possible de définir un tableau avec plusieurs dimensions. Au lieu d'être accessible en fournissant un index unique, un tableau multidimensionnel est accessible en spécifiant un index pour chaque dimension.

La déclaration du tableau multidimensionnel peut être effectuée en ajoutant [] pour chaque dimension à une valeur de décomposition de tableau régulière. Par exemple, pour créer un tableau int dimensions, ajoutez un autre ensemble de crochets à la déclaration, par exemple int[][] . Cela continue pour les tableaux à trois dimensions ( int[][][] ) et ainsi de suite.


Pour définir un tableau à deux dimensions avec trois lignes et trois colonnes:

int rows = 3;
int columns = 3;
int[][] table = new int[rows][columns];

Le tableau peut être indexé et lui attribuer des valeurs avec cette construction. Notez que les valeurs non attribuées sont les valeurs par défaut pour le type d'un tableau, dans ce cas 0 pour int .

table[0][0] = 0;
table[0][1] = 1;
table[0][2] = 2;

Il est également possible d'instancier une dimension à la fois et même de créer des tableaux non rectangulaires. Celles-ci sont plus communément appelées tableaux déchiquetés .

int[][] nonRect = new int[4][];

Il est important de noter que même s’il est possible de définir une dimension de tableau irrégulier, son niveau précédent doit être défini.

// valid
String[][] employeeGraph = new String[30][];

// invalid
int[][] unshapenMatrix = new int[][10];

// also invalid
int[][][] misshapenGrid = new int[100][][10];

Comment les tableaux multidimensionnels sont représentés en Java

Représentation d'un tableau multidimensionnel à Java

Source de l'image: http://math.hws.edu/eck/cs124/javanotes3/c8/s5.html


Intialisation littérale du tableau dentelé

Les tableaux multidimensionnels et les tableaux irréguliers peuvent également être initialisés avec une expression littérale. Les éléments suivants déclarent et remplissent un tableau int 2x3:

int[][] table = {
    {1, 2, 3},
    {4, 5, 6}
};

Remarque : Les sous-réseaux déchiquetés peuvent également être null . Par exemple, le code suivant déclare et renseigne un tableau int deux dimensions dont le premier sous-tableau est null , le second sous-tableau est de longueur nulle, le troisième sous-tableau a une longueur et le dernier sous-tableau est un tableau à deux longueurs:

int[][] table = {
    null,
    {},
    {1},
    {1,2}
};

Pour les tableaux multidimensionnels, il est possible d'extraire des tableaux de dimension inférieure par leurs indices:

int[][][] arr = new int[3][3][3];
int[][] arr1 = arr[0]; // get first 3x3-dimensional array from arr
int[] arr2 = arr1[0]; // get first 3-dimensional array from arr1
int[] arr3 = arr[0]; // error: cannot convert from int[][] to int[]