1. Introduction
Les tableaux en Java sont un outil puissant, mais la syntaxe de base se heurte vite à la routine. La classe java.util.Arrays vient à la rescousse — un ensemble de méthodes statiques pour travailler avec des tableaux : tri, copie, comparaison, affichage formaté et plus encore. Pas besoin d’instances — toutes les méthodes sont statiques et se déclenchent via le nom de la classe.
Pour utiliser ces méthodes, ajoutez l’import au début du fichier :
import java.util.Arrays;
Si vous oubliez l’import, le compilateur se plaindra que Arrays est « introuvable » — ce n’est pas un bug, mais le comportement attendu sans import.
2. Tri d’un tableau : Arrays.sort
Comment fonctionne Arrays.sort
Syntaxe
Arrays.sort(array);
Arrays.sort(array, startIndex, endIndex);
La méthode trie « en place » — elle modifie le tableau d’origine et ne renvoie pas un nouveau tableau. Vous voulez conserver l’ordre original ? Copiez d’abord le tableau.
Exemple : tri d’un tableau d’entiers
int[] scores = {5, 2, 9, 1, 7};
Arrays.sort(scores); // Tri croissant
System.out.println("Tableau trié: " + Arrays.toString(scores));
// Affichera: [1, 2, 5, 7, 9]
Exemple : tri d’un tableau de chaînes
String[] names = {"Alice", "Bob", "Charlie", "David"};
Arrays.sort(names);
System.out.println(Arrays.toString(names));
// [Charlie, David, Bob, Alice]
Important : les chaînes sont triées lexicographiquement (par ordre alphabétique), les nombres — par ordre croissant.
Tri d’une partie du tableau
int[] arr = {7, 5, 3, 1, 9, 8};
Arrays.sort(arr, 1, 4); // trie les éléments d’indice 1 à 3 inclus (4 exclu)
System.out.println(Arrays.toString(arr));
// [7, 1, 3, 5, 9, 8]
Particularités
- Tri « en place » : le tableau d’origine est modifié.
- Les nombres — par ordre croissant, les chaînes — par ordre alphabétique.
- Pour des objets complexes, utilisez les surcharges avec un comparateur.
3. Remplissage d’un tableau : Arrays.fill
Syntaxe
Arrays.fill(array, value);
Arrays.fill(array, startIndex, endIndex, value);
La méthode remplit tous les éléments, ou la partie indiquée, avec la même valeur.
int[] marks = new int[5];
Arrays.fill(marks, 3); // Tous les éléments valent désormais 3
System.out.println(Arrays.toString(marks)); // [3, 3, 3, 3, 3]
Remplir une partie du tableau
int[] arr = new int[10];
Arrays.fill(arr, 2, 5, 7); // Remplit les éléments d’indice 2 à 4 inclus (5 exclu)
System.out.println(Arrays.toString(arr));
// [0, 0, 7, 7, 7, 0, 0, 0, 0, 0]
Remplir un tableau de chaînes
String[] guests = new String[4];
Arrays.fill(guests, "Vide");
System.out.println(Arrays.toString(guests)); // [Vide, Vide, Vide, Vide]
4. Copie d’un tableau : Arrays.copyOf et Arrays.copyOfRange
Arrays.copyOf
Syntaxe
Arrays.copyOf(originalArray, newLength);
Crée un nouveau tableau et copie les éléments depuis l’original. Si la nouvelle longueur est supérieure à l’originale, la « queue » est remplie par des valeurs par défaut (0 pour int, null pour les types référence).
int[] original = {1, 2, 3};
int[] copy = Arrays.copyOf(original, 5);
System.out.println(Arrays.toString(copy)); // [1, 2, 3, 0, 0]
Réduire un tableau
int[] shortCopy = Arrays.copyOf(original, 2);
System.out.println(Arrays.toString(shortCopy)); // [1, 2]
Arrays.copyOfRange
Syntaxe
Arrays.copyOfRange(originalArray, startIndex, endIndex);
int[] arr = {10, 20, 30, 40, 50};
int[] mid = Arrays.copyOfRange(arr, 1, 4); // Copiera les éléments d’indice 1 à 3
System.out.println(Arrays.toString(mid)); // [20, 30, 40]
5. Comparaison de tableaux : Arrays.equals et Arrays.deepEquals
En Java, on ne peut pas comparer des tableaux avec == — cela compare des références, pas le contenu :
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); // false!
Comment comparer le contenu ?
Arrays.equals(array1, array2);
Arrays.deepEquals(matrix1, matrix2);
System.out.println(Arrays.equals(a, b)); // true
Pour les tableaux unidimensionnels, utilisez Arrays.equals ; pour les 2D et plus — Arrays.deepEquals.
Exemple : comparaison de tableaux 2D
int[][] matrix1 = {{1, 2}, {3, 4}};
int[][] matrix2 = {{1, 2}, {3, 4}};
System.out.println(Arrays.equals(matrix1, matrix2)); // false!
System.out.println(Arrays.deepEquals(matrix1, matrix2)); // true
6. Affichage lisible d’un tableau : Arrays.toString et Arrays.deepToString
L’affichage direct d’un tableau donne une chaîne illisible :
int[] arr = {1, 2, 3};
System.out.println(arr); // [I@7a81197d
Syntaxe
Arrays.toString(array);
Arrays.deepToString(matrix);
System.out.println(Arrays.toString(arr)); // [1, 2, 3]
int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix)); // [[1, 2], [3, 4]]
7. Erreurs courantes avec la classe Arrays
Erreur n° 1 : tentative de comparer des tableaux avec ==
Les tableaux sont des objets, et == ne compare que les références. Même avec des valeurs identiques, le résultat sera false. Utilisez Arrays.equals (pour les unidimensionnels) ou Arrays.deepEquals (pour les multidimensionnels).
Erreur n° 2 : oublier que le tri modifie le tableau « en place »
Si vous avez besoin de l’ordre d’origine, faites d’abord une copie avec Arrays.copyOf, puis triez la copie. Sinon, l’original perdra son ordre.
Erreur n° 3 : mauvaise compréhension des bornes dans Arrays.fill et Arrays.copyOfRange
Ces méthodes utilisent un intervalle semi-ouvert : l’indice droit n’est pas inclus. Par exemple, Arrays.fill(arr, 2, 5, 9) remplira les indices 2, 3, 4, et l’élément d’indice 5 ne sera pas modifié.
Erreur n° 4 : tenter d’afficher un tableau directement
Un appel à System.out.println(arr) affiche une représentation technique. Utilisez Arrays.toString pour les unidimensionnels et Arrays.deepToString pour les multidimensionnels.
Erreur n° 5 : comparer des tableaux multidimensionnels avec Arrays.equals
La méthode ne compare que le niveau supérieur (les références aux tableaux internes). Pour comparer le contenu, utilisez Arrays.deepEquals.
GO TO FULL VERSION