Java PriorityQueue : Fondamentaux, Opérations et Tri Personnalisé
Java PriorityQueue
Explorez la classe PriorityQueue du framework de collections Java à travers des exemples clairs et des guides de bonnes pratiques.
La classe PriorityQueue implémente la structure de données tas (heap) et satisfait l'interface Queue, offrant une récupération efficace des éléments basée sur la priorité plutôt que sur l'ordre d'insertion.
Création d'une PriorityQueue
Commencez par importer java.util.PriorityQueue :
import java.util.PriorityQueue;
PriorityQueue<Integer> numbers = new PriorityQueue<>();
Cette configuration par défaut utilise l'ordre naturel (croissant). Vous pouvez personnaliser l'ordre en fournissant un Comparator lors de la construction de la file.
Méthodes Clés de PriorityQueue
Toutes les méthodes définies dans l'interface Queue sont disponibles, plus quelques opérations spécifiques aux files de priorité.
Insertion d'Éléments
add()– Ajoute un élément ; lève une exception si la file est pleine.offer()– Ajoute un élément ; retournefalsesi la file est pleine.
Exemple :
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(4);
numbers.add(2);
System.out.println("PriorityQueue: " + numbers);
numbers.offer(1);
System.out.println("PriorityQueue Mise à Jour: " + numbers);
}
}
Sortie
PriorityQueue: [2, 4] PriorityQueue Mise à Jour: [1, 4, 2]
Même si 4 a été ajouté avant 2, la tête reste 2 car c'est l'élément le plus petit. L'ajout de 1 réorganise la file pour que 1 devienne la tête.
Accès aux Éléments
Utilisez peek() pour voir la tête sans la supprimer :
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(4);
numbers.add(2);
numbers.add(1);
System.out.println("PriorityQueue: " + numbers);
int number = numbers.peek();
System.out.println("Élément Accédé: " + number);
}
}
Sortie
PriorityQueue: [1, 4, 2] Élément Accédé: 1
Suppression d'Éléments
remove()– Supprime un élément spécifié, retournanttruesi réussi.poll()– Récupère et supprime la tête de la file.
Exemple :
import java.util.PriorityQueue;
class Main {
public static void main(String[] args) {
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(4);
numbers.add(2);
numbers.add(1);
System.out.println("PriorityQueue: " + numbers);
boolean result = numbers.remove(2);
System.out.println("L'élément 2 est-il supprimé? " + result);
int number = numbers.poll();
System.out.println("Élément Supprimé avec poll(): " + number);
}
}
Sortie
PriorityQueue: [1, 4, 2] L'élément 2 est-il supprimé? true Élément Supprimé avec poll(): 1
Itération sur une PriorityQueue
Itérez avec iterator() (nécessite java.util.Iterator) :
import java.util.PriorityQueue;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
PriorityQueue<Integer> numbers = new PriorityQueue<>();
numbers.add(4);
numbers.add(2);
numbers.add(1);
System.out.print("PriorityQueue avec iterator(): ");
Iterator<Integer> iterate = numbers.iterator();
while (iterate.hasNext()) {
System.out.print(iterate.next());
System.out.print(", ");
}
}
}
Sortie
PriorityQueue avec iterator(): 1, 4, 2,
Méthodes Supplémentaires
| Méthode | Description |
|---|---|
contains(element) | Retourne true si l'élément existe dans la file. |
size() | Retourne le nombre d'éléments dans la file. |
toArray() | Convertit la file en tableau. |
Tri Personnalisé avec Comparator
Pour inverser l'ordre naturel ou implémenter toute priorité personnalisée, fournissez un Comparator lors de la création de la file :
import java.util.PriorityQueue;
import java.util.Comparator;
class Main {
public static void main(String[] args) {
PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator());
numbers.add(4);
numbers.add(2);
numbers.add(1);
numbers.add(3);
System.out.print("PriorityQueue: " + numbers);
}
}
class CustomComparator implements Comparator<Integer> {
@Override
public int compare(Integer a, Integer b) {
return b.compareTo(a); // ordre inverse
}
}
Sortie
PriorityQueue: [4, 3, 1, 2]
Le comparateur personnalisé assure que la tête est l'élément le plus grand. Pour plus de détails, consultez l'API Java Comparator.
Java
- Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
- Commentaires Java : Types, utilisation et bonnes pratiques
- Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
- Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
- Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
- Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
- Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
- Annotations Java expliquées : types, placement et exemples pratiques
- Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code