Classe PriorityQueue de Java : Guide pour Débutants
Introduction
Bonjour, futurs programmeurs Java !aujourd'hui, nous allons plonger dans le monde fascinant de PriorityQueue en Java. Ne vous inquiétez pas si vous ne l'avez jamais entendu avant – nous commencerons de zéro et nous progresserons ensemble. Pensez à une PriorityQueue comme une sorte de file (ou queue) spéciale où la personne ou l'item le plus important passe toujours en premier. Excitant, non ? Commençons !
Déclaration de Classe
En Java, la classe PriorityQueue fait partie du Framework de Collections Java. C'est comme une liste VIP pour vos données ! Voici comment la déclarer :
import java.util.PriorityQueue;
PriorityQueue<ElementType> pq = new PriorityQueue<>();
Remplacez ElementType
par le type de données que vous souhaitez stocker, comme Integer, String, ou même vos propres objets personnalisés (mais nous y viendrons plus tard).
Paramètres
Lors de la création d'une PriorityQueue, vous pouvez spécifier quelques paramètres optionnels :
- Capacité initiale : Nombre d'items qu'elle peut contenir initialement.
- Comparateur : Un objet spécial qui décide de l'ordre des éléments.
Voici un exemple :
PriorityQueue<Integer> pq = new PriorityQueue<>(10, Collections.reverseOrder());
Cela crée une PriorityQueue qui peut initialement contenir 10 entiers, et ils seront classés du plus grand au plus petit.
Constructeurs de Classe
PriorityQueue propose plusieurs constructeurs. Pensez aux constructeurs comme des recettes différentes pour créer votre file. Voici les principaux :
Constructeur | Description |
---|---|
PriorityQueue() |
Crée une file vide avec une capacité initiale par défaut (11) |
PriorityQueue(int initialCapacity) |
Crée une file vide avec la capacité initiale spécifiée |
PriorityQueue(Comparator<? super E> comparator) |
Crée une file vide avec le comparateur spécifié |
PriorityQueue(Collection<? extends E> c) |
Crée une file contenant les éléments de la collection spécifiée |
Voyons un exemple :
PriorityQueue<String> fruitQueue = new PriorityQueue<>();
PriorityQueue<Integer> numberQueue = new PriorityQueue<>(20);
Dans la première ligne, nous créons une file pour les chaînes de caractères (peut-être des noms de fruits ?). Dans la seconde, nous créons une file pour les nombres qui peut initialement contenir 20 items.
Méthodes de Classe
Maintenant, examinons quelques-unes des choses sympas que vous pouvez faire avec une PriorityQueue :
Méthode | Description |
---|---|
add(E e) |
Ajoute un élément à la file |
offer(E e) |
Ajoute un élément à la file (retourne false si pleine) |
peek() |
Récupère, mais ne retire pas, la tête de la file |
poll() |
Récupère et retire la tête de la file |
remove(Object o) |
Supprime une instance unique de l'élément spécifié |
size() |
Retourne le nombre d'éléments dans la file |
clear() |
Supprime tous les éléments de la file |
Voyons ces exemples en action :
PriorityQueue<String> animalQueue = new PriorityQueue<>();
animalQueue.add("Chien");
animalQueue.offer("Chat");
animalQueue.add("Éléphant");
System.out.println("Peek : " + animalQueue.peek()); // Affiche : Peek : Chat
System.out.println("Poll : " + animalQueue.poll()); // Affiche : Poll : Chat
System.out.println("Taille : " + animalQueue.size()); // Affiche : Taille : 2
Notez comment "Chat" est venu en premier ? C'est parce que PriorityQueue trie les chaînes de caractères alphabétiquement par défaut.
Méthodes Héritées
PriorityQueue hérite également de méthodes de ses classes parentes. C'est comme avoir des fonctionnalités bonus ! Certaines utiles incluent :
-
contains(Object o)
: Vérifie si la file contient l'élément spécifié -
toArray()
: Retourne un tableau contenant tous les éléments de la file -
iterator()
: Retourne un itérateur sur les éléments de la file
Voici un exemple rapide :
PriorityQueue<Integer> numberQueue = new PriorityQueue<>();
numberQueue.add(5);
numberQueue.add(2);
numberQueue.add(8);
System.out.println("Contient 2 ? " + numberQueue.contains(2)); // Affiche : Contient 2 ? true
Object[] array = numberQueue.toArray();
System.out.println("Premier élément : " + array[0]); // Affiche : Premier élément : 2
Exemple d'Ajout d'un Élément à une Priority Queue
Mettons tout cela en pratique avec un exemple amusant. Imaginez que nous organisons une fête et que nous voulons saluer nos invités dans l'ordre de leur arrivée :
import java.util.PriorityQueue;
public class PartyGreeter {
public static void main(String[] args) {
PriorityQueue<Guest> guestQueue = new PriorityQueue<>();
guestQueue.add(new Guest("Alice", 18.30));
guestQueue.add(new Guest("Bob", 18.15));
guestQueue.add(new Guest("Charlie", 18.45));
while (!guestQueue.isEmpty()) {
Guest guest = guestQueue.poll();
System.out.println("Bienvenue, " + guest.name + " ! Vous êtes arrivé à " + guest.arrivalTime);
}
}
static class Guest implements Comparable<Guest> {
String name;
double arrivalTime;
Guest(String name, double arrivalTime) {
this.name = name;
this.arrivalTime = arrivalTime;
}
@Override
public int compareTo(Guest other) {
return Double.compare(this.arrivalTime, other.arrivalTime);
}
}
}
Ce programme affichera :
Bienvenue, Bob ! Vous êtes arrivé à 18.15
Bienvenue, Alice ! Vous êtes arrivé à 18.3
Bienvenue, Charlie ! Vous êtes arrivé à 18.45
Dans cet exemple, nous avons créé une classe Guest
personnalisée et avons dit à Java comment comparer les invités en fonction de leur heure d'arrivée. La PriorityQueue a ensuite trié nos invités automatiquement !
Et voilà ! Vous avez juste pris vos premiers pas dans le monde des PriorityQueues en Java. N'oubliez pas, la pratique fait le maître, donc n'hésitez pas à expérimenter avec ces concepts. Qui sait ? Peut-être que vous utiliserez une PriorityQueue pour organiser la liste des invités de votre prochaine fête !
Credits: Image by storyset