English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, nous allons apprendre la classe PriorityQueue du cadre de collections Java à l'aide d'exemples.
La classe PriorityQueue fournit les fonctionnalités de la structure de données pile.
Elle implémenteInterface Queue.
Contrairement à la file d'attente ordinaire, les éléments de la file d'attente prioritaire sont recherchés dans l'ordre de tri.
Supposons que nous voulions rechercher les éléments en ordre croissant. Dans ce cas, la tête de la file d'attente prioritaire est l'élément le plus petit. Une fois cet élément recherché, le prochain élément le plus petit deviendra la tête de la file.
Il convient de noter que les éléments de la file d'attente prioritaire peuvent ne pas être triés. Cependant, les éléments sont toujours recherchés dans l'ordre de tri.
为了创建优先级队列,我们必须导入java.util.PriorityQueue包。导入程序包后,可以使用以下方法在Java中创建优先级队列。
PriorityQueue<Integer> numbers = new PriorityQueue<>();
Pour créer une file d'attente prioritaire, nous devons importer le paquet java.util.PriorityQueue. Après avoir importé le paquet, nous pouvons utiliser les méthodes suivantes pour créer une file d'attente prioritaire en Java.
Ici, nous avons créé une file d'attente prioritaire sans aucun paramètre. Dans ce cas, la tête de la file d'attente prioritaire est l'élément le plus petit de la file. Les éléments seront retirés de la file en ordre croissant.
Méthodes de PriorityQueue
Insère un élément dans la PriorityQueue - add()
Insère l'élément spécifié dans la file. Si la file est pleine, lève une exception. - offer()
Par exemple,
import java.util.PriorityQueue; class Main { public static void main(String[] args) { //Création d'une file d'attente prioritaire PriorityQueue<Integer> numbers = new PriorityQueue<>(); //Insère l'élément spécifié dans la file. Si la file est pleine, retourne false. numbers.add(4); numbers.add(2); System.out.println("PriorityQueue : " + numbers);}} //Utilisation de la méthode add() Utilisation de la méthode offer()1); numbers.offer( + numbers);}} } }
Output result
PriorityQueue: [2, 4] System.out.println("PriorityQueue mise à jour : "1, 4, 2]
PriorityQueue mise à jour : [4Et ici, nous avons créé une file d'attente prioritaire nommée numbers. Nous avons déjà2inséré dans la file.
Bien que4a été inséré dans2Avant, mais la tête de la file était2. C'est parce que la tête de la file d'attente prioritaire est l'élément le plus petit de la file.
Puis, nous allons1Maintenant, nous allons1Stocké au début de la file.
Pour accéder à un élément de la file d'attente prioritaire, nous pouvons utiliser la méthode peek(). Cette méthode retourne l'élément au début de la file. Par 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);}} //Utilisation de la méthode peek() int number = numbers.peek(); System.out.println("Accéder à un élément : " + number); } }
Output result
PriorityQueue: [1, 4, 2] Accéder à un élément: 1
remove() - Supprime l'élément spécifié de la file
poll() - Retourne et supprime l'élément au début de la file
Par exemple,
import java.util.PriorityQueue; class Main { public static void main(String[] args) { // Création d'une file d'attente prioritaire PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue : " + numbers);}} //Utilisation de la méthode remove() boolean result = numbers.remove(2); System.out.println("Élément2Est-ce que l'élément a été supprimé ? " + result); //Utilisation de la méthode poll() int number = numbers.poll(); System.out.println("L'élément supprimé en utilisant poll() : " + number); } }
Output result
PriorityQueue: [1, 4, 2] Élément2Est-ce que l'élément a été supprimé ? true Élément supprimé en utilisant poll() : 1
Pour parcourir les éléments de la file d'attente prioritaire, nous pouvons utiliser la méthode iterator(). Pour utiliser cette méthode, nous devons importer le paquet java.util.Iterator. Par exemple,
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("Utilisation de iterator() pour parcourir PriorityQueue : "); //Utilisation de la méthode iterator() Iterator<Integer> iterate = numbers.iterator(); while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Output result
Parcourir PriorityQueue en utilisant iterator() : 1, 4, 2,
Méthode | Description du contenu |
---|---|
contains(element) | Recherche de l'élément spécifié dans la file d'attente prioritaire. Si l'élément est trouvé, retourne true, sinon retourne false. |
size() | Retourne la longueur de la file d'attente prioritaire. |
toArray() | Convertit la file d'attente prioritaire en tableau et la retourne. |
Dans tous les exemples ci-dessus, les éléments de la file d'attente prioritaire sont récupérés dans l'ordre naturel (croissant). Cependant, nous pouvons définir cette ordre nous-mêmes.
Pour cela, nous devons créer notre propre classe comparator, qui implémente l'interface Comparator. Par exemple
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 number1, Integer number2) { int value = number1.compareTo(number2); //The elements are sorted in reverse order if (value > 0) { return -1; } else if (value < 0) { return 1; } else { return 0; } } }
Output result
PriorityQueue: [4, 3, 1, 2]
In the above example, we created a priority queue and passed the CustomComparator class as a parameter.
The CustomComparator class implements the Comparator interface.
Then, we rewrite the compare() method. This method now makes the head of the element the largest number.