Montre l’utilisation des tableaux à plusieurs dimensions en langage Java.
Le langage Java permet de définir des tableaux de dimensions quelconques. Voyons comment les déclarer et comment les utiliser.
Dans l’article Les tableaux en Java (1) ont été présentés les tableaux à une dimension en Java. Nous allons maintenant voir l’utilisation de tableaux de dimensions quelconques. Dans les grandes lignes, ce qui a été dit dans ce précédent article reste valable dans la mesure ou en Java, les tableaux multi-dimensionnels ne sont que des tableaux de tableaux. Nous allons donc voir maintenant comment les déclarer et les utiliser et vous montrer quelques fonctions spécifiques disponible dans l’API.
Pour créer une matrice de 3 x 3 entiers, on pourra la définir comme suit :
La ligne précédente déclare et initialise en mémoire un tableau de 3 élements contenant l’adresse de 3 autres tableaux de 3 éléments. ce qui donne :
Comme pour les tableaux à une dimension, on peut le créer et l’initialiser à partir d’un litéral :
On poura également utiliser un initialiseur anonyme. Dans l’exemple suivant, on passe le tableau à une fonction :
On peut également définir des tableaux à plusieurs dimensions non rectangulaires :
Bien sur, on peut définir des tableaux aux nombre de dimensions quelconques. Il suffit d’ajouter des crochets supplémentaires comme dans l’exemple suivant :
Pour écrire dans une cellule, nous utilisons autant d’indices entre crochets que de dimensions. Pour notre matrice de 3 x3 du premier exemple, nous pouvons écrire :
Pour lire, nous faisons l’inverse :
Prenons le tableau suivant :
Avec une boucle for :
Qui affiche :
Si nous n’utilisons pas les indices dans la boucle, nous pouvons utiliser une boucle de type foreach :
qui affiche :
En Java 8 nous pouvons utiliser les streams et lambda sur un tableau multi-dimensionnel. L’exemple suivant montre comment balayer l’ensemble des cellules du tableau :
qui affiche :
Si nous utilisons la même méthode que pour un objet à une dimensions nous aurons le code suivant :
qui affiche :
Ce qui n’est pas ce que nous souhaitons. Comme les tableaux multi-dimensionnels sont des tableaux de tableaux, cette méthode renvoi le contenu du premier tableau qui ne contient que les adresses des 3 sous-tableaux.
Il faut donc utiliser une méthode spécifique à ce type de tableaux qui est :
Arrays.deepToString()
Ce qui donne :
Prenons l’exemple des tableaux suivant :
Ecrivons le test suivant :
Ce qui donne :
Comme pour les tableaux à une dimension, cette méthode ne conviens pas pour comparer 2 tableaux distincts. Utilisons donc la méthode Arrays.equals() comme pour les tableaux à une dimension :
qui donne :
qui renvoi également false.
C’est parce que là encore nous avons à faire à un tableau multi-dimensionnel qui ne tcompare que le premier niveau de chaque tableau. Si nous affichons leur contenu :
Nous obtenons :
Nous voyons que leur contenu est différent puisqu’ils ne contiennent pas de valeurs mais les adresses des différents sous-tableaux.
Là encore, nous devons utiliser une méthode spécifique :
Arrays.deepEquals()
qui nous donne bien :
Nous n’avons pas vu la totalité des fonctions spécifiques aux tableaux multi-dimensionnel. Par exemple, il y a la méthode Arrays.deepHashCode() qui remplace dans ce cas la méthode Arrays.hashCode().
Plus généralement vous pourriez vous demander dans quel cas il vaut mieux utiliser des tableaux et dans quels cas utiliser des Collections, (par exemple le type ArrayList) qui supportent le redimmensionnement dynamique. Les collections ne gèrent pas les types primitifs mais il suffit d’utiliser des classes wrapper correspondantes (Integer pour un int par exemple) sachant que depuis Java 5, le transtypage est implicite. Je pense néanmoins que lorsque l’on a besoin de faire des calculs sur des tableaux de tailles fixes de chiffres, le type tableau est plus pratique et plus efficace, car les cellules contiennent directement les valeurs et non pas des adresses sur des objets.
Crée par: chris
Créé le: 1er septembre 2017
Modifié le: 1er septembre 2017
Nombre de visites: 979
Popularité: 10 %
Popularité absolue: 1
2003-2024 LePpf
Plan du site
| Se connecter |
RSS 2.0 |
Sur YouTube
Visiteurs connectés : 0
Nombre moyen de visites quotidiennes sur le site: 246