PriorityQueue en français
Qu'est-ce qu'une PriorityQueue ?
La PriorityQueue est une implémentation de l'interface Queue en Java. Elle permet de stocker des éléments dans une collection ordonnée en fonction d'un ordre naturel ou selon un Comparator personnalisé. Dans ce type de file d'attente, l'élément ayant la valeur la plus faible se trouve en tête, et les méthodes de la Queue telles que .peek()
et .poll()
agissent sur cet élément.
Syntaxe de la PriorityQueue
Pour utiliser une PriorityQueue, vous devez d'abord importer le package approprié :
import java.util.PriorityQueue;
En initialisant une PriorityQueue, vous devrez spécifier le type de données qu'elle contiendra :
PriorityQueue q = new PriorityQueue();
Ici, DataType
est le type d'élément que vous souhaitez stocker.
Si vous souhaitez appliquer un ordre de tri personnalisé, vous pouvez créer un Comparator comme suit :
import java.util.PriorityQueue;
import java.util.Comparator;
PriorityQueue q = new PriorityQueue(new CustomComparator());
Ajouter des éléments
Pour ajouter de nouveaux éléments à la PriorityQueue, vous utilisez la méthode .add()
. Voici comment cela fonctionne :
priorityqueue.add(item);
où item
est l'élément à ajouter et doit correspondre au type de la PriorityQueue.
Exemple d'ajout
Voici un exemple qui initialise une PriorityQueue de chaînes de caractères :
import java.util.PriorityQueue;
public class Main {
public static PriorityQueue SetupPriorityQueue() {
PriorityQueue result = new PriorityQueue();
result.add("Chou");
result.add("Pizza");
result.add("Saucisse");
result.add("Pommes de terre");
result.add("Salade");
return result;
}
public static void main(String[] args) {
PriorityQueue food = SetupPriorityQueue();
System.out.println(food);
}
}
Ce code affichera : [Chou, Pizza, Saucisse, Pommes de terre, Salade]
.
Supprimer des éléments spécifiques
Pour retirer un élément spécifique de la PriorityQueue, vous pouvez utiliser la méthode .remove()
. La syntaxe est la suivante :
priorityqueue.remove(item);
Exemple de suppression
Modifions la méthode principale de l'exemple précédent :
public static void main(String[] args) {
PriorityQueue food = SetupPriorityQueue();
food.remove("Pizza");
while (food.size() > 0) {
System.out.println(food.poll());
}
}
Ce code affichera :
Chou
Pommes de terre
Salade
Saucisse
Vérifier l'existence d'un élément
Pour vérifier si un élément donné est présent dans la PriorityQueue, utilisez la méthode .contains()
. Voici la syntaxe :
boolean result = priorityqueue.contains(item);
Exemple de vérification
Voici une modification de la méthode principale :
public static void main(String[] args) {
PriorityQueue food = SetupPriorityQueue();
if (food.contains("Noix")) {
System.out.println("Avertissement allergène !");
} else {
System.out.println("Sûr à manger.");
}
}
Ce code affichera : Sûr à manger.
Obtenir la taille de la PriorityQueue
Pour connaître le nombre d'éléments dans la PriorityQueue, vous pouvez utiliser la méthode .size()
:
int ItemCount = priorityqueue.size();
Exemple de taille
Voici un exemple de code pour afficher la taille :
public static void main(String[] args) {
PriorityQueue food = SetupPriorityQueue();
while (food.size() > 0) {
System.out.println(food.poll());
System.out.println(food.size());
}
}
Le résultat affichera :
Chou
4
Pizza
3
Pommes de terre
2
Salade
1
Saucisse
0
Parcourir une PriorityQueue
Vous pouvez parcourir une PriorityQueue en utilisant une boucle for-each, mais notez que les éléments seront renvoyés dans l'ordre où ils ont été ajoutés et non dans l'ordre de priorité.
Exemple de parcours
public static void main(String[] args) {
PriorityQueue food = SetupPriorityQueue();
for (String i : food) {
System.out.println(i);
}
}
Ce code affichera :
Chou
Pizza
Saucisse
Pommes de terre
Salade
Méthodes .peek() et .poll()
Les méthodes de la Queue .peek()
et .poll()
fonctionnent sur l'élément en tête de la PriorityQueue.
- .peek() renvoie l'élément en tête sans le retirer.
- .poll() retire l'élément en tête et renvoie sa valeur.
Exemple d'utilisation de .peek() et .poll()
Voici un exemple modifié :
public static void main(String[] args) {
PriorityQueue food = SetupPriorityQueue();
System.out.println(food.peek());
while (food.size() > 0) {
System.out.println(food.poll());
}
System.out.println(food.peek());
}
Ce code affichera :
Chou
Chou
Pizza
Pommes de terre
Salade
Saucisse
null
Utiliser un Comparator personnalisé
Pour établir un ordre de priorité différent de celui par défaut, il est nécessaire d'utiliser un Comparator personnalisé. Ce dernier est une classe spécialisée qui aide la PriorityQueue à déterminer l'ordre des éléments de même type de données.
Vous devrez implémenter l'interface Comparator<DataType>
et redéfinir la méthode de comparaison :
import java.util.PriorityQueue;
import java.util.Comparator;
static class CustomComparator implements Comparator {
@Override
public int compare(DataType item1, DataType item2) {
// renvoyer un positif si item1 < item2, et négatif si item1 > item2
}
}
PriorityQueue q = new PriorityQueue(new CustomComparator());
Exemple de Comparator personnalisé
Voici un exemple inversant les priorités des valeurs de chaîne dans la PriorityQueue :
import java.util.PriorityQueue;
import java.util.Comparator;
public class Main {
static class CustomComparator implements Comparator {
@Override
public int compare(String item1, String item2) {
return item1.compareTo(item2) < 0 ? 1 : -1;
}
}
public static void main(String[] args) {
PriorityQueue food = new PriorityQueue(new CustomComparator());
food.add("Chou");
food.add("Pizza");
food.add("Saucisse");
food.add("Pommes de terre");
food.add("Salade");
while (food.size() > 0) {
System.out.println(food.poll());
}
}
}
Ce code affichera :
Saucisse
Salade
Pommes de terre
Pizza
Chou