CodeGym /Cours /JAVA 25 SELF /Classe Arrays: sort, fill, copyOf, equals

Classe Arrays: sort, fill, copyOf, equals

JAVA 25 SELF
Niveau 7, Leçon 5
Disponible

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);
Tri de tout le tableau ou d’un sous-intervalle

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);
Remplir tout le tableau ou une plage avec une seule valeur

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éer une nouvelle copie avec la longueur indiquée

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);
Copie d’un sous-tableau dans un nouveau tableau
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);
Comparaison superficielle et profonde
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);
Affichage formaté des tableaux unidimensionnels et multidimensionnels
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.

1
Mission
JAVA 25 SELF, niveau 7, leçon 5
Bloqué
Tri des résultats de la course 🏃‍♂️
Tri des résultats de la course 🏃‍♂️
1
Mission
JAVA 25 SELF, niveau 7, leçon 5
Bloqué
Initialisation des emplacements d'entrepôt vides 📦
Initialisation des emplacements d'entrepôt vides 📦
1
Mission
JAVA 25 SELF, niveau 7, leçon 5
Bloqué
Extraction des relevés centraux de la station météo ☀️
Extraction des relevés centraux de la station météo ☀️
1
Mission
JAVA 25 SELF, niveau 7, leçon 5
Bloqué
Vérification des codes d'accès secrets 🔐
Vérification des codes d'accès secrets 🔐
1
Étude/Quiz
Tableaux, niveau 7, leçon 5
Indisponible
Tableaux
Introduction aux tableaux
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION