Un tableau à deux dimensions
Un tableau à deux dimensions
Cet exemple montre comment on peut définir un tableau à deux dimensions d'int et lui allouer de la place mémoire.
Deux méthodes sont proposées.
- Dans la première méthode, on fait l'allocation en une seule fois en précisant les deux dimensions. On obtient alors un tableau rectangulaire.
- Dans la deuxième méthode, on alloue d'abord un tableau à une dimension de références vers des tableaux à une dimension d'int ; on a ainsi allouer un tableau destiné à recevoir les références des lignes. Puis on alloue une par une les lignes du tableau. Les lignes ne doivent pas nécessairement avoir toutes la même longueur.
L'exemple illustre aussi, implictement, le principe du ramasse-miettes. Le ramasse-miettes est un processus qui tourne de temps à autre, à la recherche d'espace-mémoire qui ne soit plus référencé par une variable du programme et libère alors un tel espce. C'est vrai pour les objets comme pour les tableaux. Cela signifie qu'il n'est pas utile d'utiliser des instructions du type de l'instruction free du langage C.
Grâce au ramasse-miettes, on ne désalloue pas le premier tableau alloué avant d'utiliser la variable tableau pour référencer un autre tableau.
class TableauDouble {
public static void main(String[] arg) {
int[][] tableau;
int i, j;
tableau = new int[2][3];
for (int i = 0;i < tableau.length; i++) {
for (int j = 0;j < tableau[i].length;j++) {
tableau[i][j] = i + j;
System.out.print(tableau[i][j] + " ");
}
System.out.println();
}
System.out.println();
tableau = new int[3][];
for (i = 0; i < tableau.length; i++) {
tableau[i] = new int[i + 1];
for (j = 0; j < tableau[i].length; j++) {
tableau[i][j] = i + j;
System.out.print(tableau[i][j] + " ");
}
System.out.println();
}
System.out.println();
}
}
On obtient à l'exécution :
0 1 2
1 2 3
0
1 2
2 3 4
Pour accéder au fichier TableauDouble.java.
tableau = new int[2][3]; : on déclare et on construit un tableau à deux lignes et trois colonnes..
Cette méthode print écrit la chaîne de caractères mais ne passe pas après à la ligne, contrairement à la méthode println (ln comme line, ligne en anglais).
tableau[i][j] est l'entier qui se trouve à la i ème ligne et j ème colonne.
tableau = new int[3][] : on réaffecte tableau ; un ramasse-miettes va libérer l'espace-mémoire alloué au précédent tableau. Le nouveau tableau défini est destiné à recevoir deux références
de tableaux à une dimension d'entiers.
tableau[i] = new int[i + 1] : le nouveau tableau à deux dimensions ne sera pas rectangulaire puisque la ligne d'indice i est de longueur i + 1.
© Irène Charon Télécom ParisTech 2010