Trier des tableaux et des collections en pratique
Appliquez le tri à des listes de produits, des classements et des calendriers d’événements à l’aide d’exemples concrets.
Trier des tableaux et des collections en pratique est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Le tri en pratique
Cette leçon applique les techniques de tri à des situations réalistes : catalogues de produits, classements, planification d'événements et classement des résultats de recherche.
Arrays.sort pour les tableaux de types primitifs
Arrays.sort() pour les tableaux de types primitifs utilise un tri rapide à deux pivots, extrêmement rapide, avec une complexité moyenne en O(n log n).
int[] scores = {45, 90, 78, 62, 88, 33};
Arrays.sort(scores);
System.out.println(Arrays.toString(scores)); // [33, 45, 62, 78, 88, 90]
// Sort a range only
int[] data = {9, 3, 7, 1, 5};
Arrays.sort(data, 1, 4); // sort indices 1-3 only
System.out.println(Arrays.toString(data)); // [9, 1, 3, 7, 5]Arrays.sort pour les tableaux d'objets
Pour les tableaux d'objets, Arrays.sort() utilise TimSort, qui est stable. Vous pouvez fournir un comparateur pour définir un ordre personnalisé.
String[] names = {"Charlie", "Alice", "Bob", "Diana"};
Arrays.sort(names);
System.out.println(Arrays.toString(names)); // [Alice, Bob, Charlie, Diana]
// Custom order: by length, then alphabetically
Arrays.sort(names, Comparator.comparingInt(String::length).thenComparing(Comparator.naturalOrder()));
System.out.println(Arrays.toString(names)); // [Bob, Alice, Diana, Charlie]Collections.sort et List.sort
Les deux trient la liste directement. List.sort() est désormais la méthode recommandée.
List<Integer> nums = new ArrayList<>(List.of(5, 2, 8, 1, 9, 3));
// Old way
Collections.sort(nums);
System.out.println(nums); // [1, 2, 3, 5, 8, 9]
// Modern way (same result)
nums.sort(Comparator.naturalOrder());
nums.sort(null); // null means natural order
// Descending
nums.sort(Comparator.reverseOrder());
System.out.println(nums); // [9, 8, 5, 3, 2, 1]Stream.sorted() pour un style fonctionnel
Utilisez stream().sorted() lors de la construction d'une chaîne de traitement : cela produit un nouveau flux trié sans modifier la source.
List<String> cities = List.of("Tokyo", "London", "New York", "Paris", "Sydney");
// Sorted stream — source list unchanged
List<String> sorted = cities.stream()
.sorted(Comparator.comparingInt(String::length).thenComparing(Comparator.naturalOrder()))
.collect(Collectors.toList());
System.out.println(sorted);
// [Paris, Tokyo, London, Sydney, New York]Tri d'une table associative par valeur
Une question classique d'entretien : trier une table associative par ses valeurs à l'aide d'un flux et d'un comparateur.
import java.util.*;
import java.util.stream.*;
Map<String, Integer> scores = Map.of(
"Alice", 95, "Bob", 87, "Charlie", 92, "Diana", 87
);
Map<String, Integer> sorted = scores.entrySet().stream()
.sorted(Map.Entry.<String, Integer>comparingByValue(Comparator.reverseOrder())
.thenComparing(Map.Entry.comparingByKey()))
.collect(Collectors.toLinkedHashMap(
Map.Entry::getKey, Map.Entry::getValue,
(v1, v2) -> v1, LinkedHashMap::new));
sorted.forEach((k, v) -> System.out.println(k + ": " + v));
// Alice: 95 / Charlie: 92 / Bob: 87 / Diana: 87Tri avec Collator selon les règles linguistiques
Pour trier des chaînes en tenant compte de la langue, utilisez java.text.Collator plutôt que String.compareTo : il gère les accents, la casse et l'ordre propre à chaque langue.
import java.text.*;
import java.util.*;
List<String> names = new ArrayList<>(List.of("éclair", "apple", "Über", "banana"));
Collator collator = Collator.getInstance(Locale.GERMAN);
names.sort(collator);
System.out.println(names); // locale-aware sortTri d'objets selon plusieurs critères
Tri de produits de commerce électronique : ceux en stock d'abord, puis par prix soldé, par évaluation et enfin par nom.
record Product(String name, double price, double salePrice, double rating, boolean inStock) {}
Comparator<Product> bestFirst = Comparator
.comparing(Product::inStock).reversed() // in-stock first
.thenComparingDouble(Product::salePrice) // cheapest sale price
.thenComparingDouble(Product::rating).reversed() // highest rated
.thenComparing(Product::name); // alphabetical tiebreakTri d'événements par date et heure
Tri chronologique d'un programme d'événements à l'aide des types java.time qui implémentent Comparable.
import java.time.*;
import java.util.*;
record Event(String title, LocalDate date, LocalTime time) {}
List<Event> schedule = new ArrayList<>(List.of(
new Event("Workshop", LocalDate.of(2024,7,15), LocalTime.of(9, 0)),
new Event("Keynote", LocalDate.of(2024,7,14), LocalTime.of(10, 30)),
new Event("Lunch Talk",LocalDate.of(2024,7,15), LocalTime.of(12, 0)),
new Event("Hackathon", LocalDate.of(2024,7,14), LocalTime.of(9, 0))
));
schedule.sort(Comparator.comparing(Event::date).thenComparing(Event::time));
schedule.forEach(e -> System.out.println(e.date() + " " + e.time() + " " + e.title()));Éléments les plus importants avec un tri
Pour trouver efficacement les N meilleurs éléments : triez dans l'ordre décroissant et prenez les N premiers, ou utilisez une PriorityQueue pour les grands ensembles de données.
List<Integer> values = List.of(42, 17, 88, 5, 73, 56, 91, 33);
// Simple approach: sort descending, take first 3
List<Integer> top3 = values.stream()
.sorted(Comparator.reverseOrder())
.limit(3)
.collect(Collectors.toList());
System.out.println(top3); // [91, 88, 73]
// For very large datasets: PriorityQueue min-heap approach is O(n log k)
import java.util.PriorityQueue;
PriorityQueue<Integer> heap = new PriorityQueue<>(3);
for (int v : values) {
heap.offer(v);
if (heap.size() > 3) heap.poll();
}
System.out.println(new TreeSet<>(heap).descendingSet()); // [73, 88, 91]Déduplication avec un tri
Après le tri, les doublons sont adjacents : leur détection en O(n) est possible.
int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5};
Arrays.sort(arr); // sort first
// Remove duplicates in O(n) after sorting
int[] unique = Arrays.stream(arr).distinct().toArray();
System.out.println(Arrays.toString(unique)); // [1, 2, 3, 4, 5, 6, 9]Performances : choisir la méthode de tri
Choisissez la bonne approche de tri :
- Tableaux de types primitifs : Arrays.sort() — le plus rapide, avec un tri rapide réalisé sur place
- Tableaux ou listes d'objets avec Comparable : Collections.sort() ou List.sort(null)
- Ordres multiples : chaînes de comparateurs avec thenComparing
- N premiers éléments d'un grand flux : PriorityQueue ou Stream.sorted().limit(N)
Vérification rapide
Quel algorithme de tri Java utilise-t-il pour les tableaux d'objets avec Arrays.sort() ?
Récapitulatif : trier des tableaux et des collections en pratique
Points essentiels :
- Arrays.sort() utilise un tri rapide à deux pivots pour les types primitifs et TimSort, qui est stable, pour les objets
- List.sort(comparateur) et Collections.sort() utilisent tous deux TimSort, qui est stable
- stream().sorted() produit un nouveau flux trié sans modifier la source
- Pour trier une table associative par valeur : entrySet().stream().sorted(Map.Entry.comparingByValue())
- Utilisez un comparateur linguistique pour trier les chaînes selon les règles d'une langue
- Pour obtenir les N premiers éléments d'un grand volume de données : une PriorityQueue de capacité k est plus efficace qu'un tri complet
Questions Fréquemment Posées
La leçon « Trier des tableaux et des collections en pratique » est-elle gratuite ?
Oui — le texte complet de « Trier des tableaux et des collections en pratique » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Trier des tableaux et des collections en pratique » ?
Appliquez le tri à des listes de produits, des classements et des calendriers d’événements à l’aide d’exemples concrets. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Trier des tableaux et des collections en pratique » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- L’interface Comparable
- Tri avec Comparator et des lambdas
- Tri multicritère avec thenComparing
- Trier des tableaux et des collections en pratique