Java PriorityQueue: Grundlagen, Operationen und benutzerdefinierte Sortierung
Java PriorityQueue
Erkunden Sie die PriorityQueue-Klasse in Javas Collections Framework durch klare Beispiele und Best-Practice-Anleitungen.
Die PriorityQueue-Klasse implementiert die Heap-Datenstruktur und erfüllt das Queue-Interface, wobei sie effizienten Abruf von Elementen basierend auf Priorität statt Einfügereihenfolge bietet.

Im Gegensatz zu Standard-Queues werden Elemente in sortierter Reihenfolge zurückgegeben. Für aufsteigende Reihenfolge ist das Head-Element das kleinste; jede nachfolgende Entfernung liefert den nächstkleineren Wert. Beachten Sie, dass die interne Reihenfolge nicht garantiert ist – nur die Extraktionsreihenfolge ist sortiert.
PriorityQueue erstellen
Beginnen Sie mit dem Import von java.util.PriorityQueue:
import java.util.PriorityQueue; PriorityQueue<Integer> numbers = new PriorityQueue<>();
Diese Standardkonfiguration verwendet natürliche Ordnung (aufsteigend). Sie können die Reihenfolge anpassen, indem Sie einen Comparator beim Konstruieren der Queue übergeben.
Wichtige Methoden von PriorityQueue
Alle im Queue-Interface definierten Methoden sind verfügbar, plus einige queue-spezifische Operationen.
Elemente einfügen
add()– Fügt ein Element hinzu; wirft Exception falls Queue voll.offer()– Fügt ein Element hinzu; gibtfalsezurück falls Queue voll.
Beispiel:
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("Updated PriorityQueue: " + numbers); } }
Ausgabe
PriorityQueue: [2, 4] Updated PriorityQueue: [1, 4, 2]
Obwohl 4 vor 2 hinzugefügt wurde, bleibt das Head 2, da es das kleinste Element ist. Das Hinzufügen von 1 sortiert die Queue neu, sodass 1 das Head wird.
Auf Elemente zugreifen
Verwenden Sie peek(), um das Head-Element anzusehen, ohne es zu entfernen:
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("Accessed Element: " + number); } }
Ausgabe
PriorityQueue: [1, 4, 2] Accessed Element: 1
Elemente entfernen
remove()– Löscht ein angegebenes Element, gibttruezurück falls erfolgreich.poll()– Ruft das Head-Element ab und entfernt es.
Beispiel:
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 the element 2 removed? " + result); int number = numbers.poll(); System.out.println("Removed Element Using poll(): " + number); } }
Ausgabe
PriorityQueue: [1, 4, 2] Is the element 2 removed? true Removed Element Using poll(): 1
Über eine PriorityQueue iterieren
Iterieren Sie mit iterator() (erfordert 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 using iterator(): "); Iterator<Integer> iterate = numbers.iterator(); while (iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
Ausgabe
PriorityQueue using iterator(): 1, 4, 2,
Zusätzliche Methoden
| Methode | Beschreibung |
|---|---|
contains(element) | Gibt true zurück, falls Element in Queue existiert. |
size() | Gibt Anzahl der Elemente in Queue zurück. |
toArray() | Konvertiert Queue in Array. |
Benutzerdefinierte Sortierung mit Comparator
Um die natürliche Reihenfolge umzukehren oder eine beliebige benutzerdefinierte Priorität zu implementieren, übergeben Sie einen Comparator beim Erstellen der Queue:
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); // umgekehrte Reihenfolge } }
Ausgabe
PriorityQueue: [4, 3, 1, 2]
Der benutzerdefinierte Comparator sorgt dafür, dass das Head das größte Element ist. Für tiefere Einblicke siehe die Java Comparator API.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList