Java PriorityQueue: Fundamenten, operaties en aangepaste sortering
Java PriorityQueue
Verken de PriorityQueue-klasse in Java's collections framework met duidelijke voorbeelden en best-practice richtlijnen.
De PriorityQueue-klasse implementeert de heap-datastructuur en voldoet aan de Queue-interface, wat efficiënte ophaling van elementen op basis van prioriteit in plaats van invoegvolgorde biedt.

In tegenstelling tot standaard wachtrijen worden elementen in gesorteerde volgorde geretourneerd. Als je oplopende volgorde nodig hebt, is de head van de wachtrij het kleinste element; elke volgende verwijdering levert de volgende kleinste waarde. Let op: de interne ordening is niet gegarandeerd – alleen de extractievolgorde is gesorteerd.
Een PriorityQueue aanmaken
Begin met importeren van java.util.PriorityQueue:
import java.util.PriorityQueue; PriorityQueue<Integer> numbers = new PriorityQueue<>();
Deze standaardconfiguratie gebruikt natuurlijke ordening (oplopend). Je kunt de volgorde aanpassen door een Comparator mee te geven bij het construeren van de wachtrij.
Belangrijkste methoden van PriorityQueue
Alle methoden gedefinieerd in de Queue-interface zijn beschikbaar, plus een paar queue-specifieke operaties.
Elementen invoegen
add()– Voegt een element toe; gooit een exception als de wachtrij vol is.offer()– Voegt een element toe; retourneertfalseals de wachtrij vol is.
Voorbeeld:
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("Bijgewerkte PriorityQueue: " + numbers); } }
Output
PriorityQueue: [2, 4] Bijgewerkte PriorityQueue: [1, 4, 2]
Hoewel 4 voor 2 werd toegevoegd, blijft de head 2 omdat het het kleinste element is. Het toevoegen van 1 herschikt de wachtrij zodat 1 de head wordt.
Elementen benaderen
Gebruik peek() om de head te bekijken zonder te verwijderen:
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("Toegankelijk element: " + number); } }
Output
PriorityQueue: [1, 4, 2] Toegankelijk element: 1
Elementen verwijderen
remove()– Verwijdert een opgegeven element, retourneerttrueals succesvol.poll()– Haalt en verwijdert de head van de wachtrij.
Voorbeeld:
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("Is element 2 verwijderd? " + result); int number = numbers.poll(); System.out.println("Verwijderd element met poll(): " + number); } }
Output
PriorityQueue: [1, 4, 2] Is element 2 verwijderd? true Verwijderd element met poll(): 1
Itereren over een PriorityQueue
Itereer met iterator() (vereist 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 met iterator(): "); Iterator<Integer> iterate = numbers.iterator(); while (iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Output
PriorityQueue met iterator(): 1, 4, 2,
Aanvullende methoden
| Methode | Beschrijving |
|---|---|
contains(element) | Retourneert true als het element in de wachtrij zit. |
size() | Retourneert het aantal elementen in de wachtrij. |
toArray() | Converteert de wachtrij naar een array. |
Aangepaste sortering met Comparator
Om de natuurlijke volgorde om te keren of een custom prioriteit te implementeren, geef een Comparator mee bij het aanmaken van de wachtrij:
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); // omgekeerde volgorde } }
Output
PriorityQueue: [4, 3, 1, 2]
De custom comparator zorgt ervoor dat de head het grootste element is. Voor diepere inzichten, raadpleeg de Java Comparator API.
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java if…else beheersen: control flow uitgelegd
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
- Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList