Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

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.

Java PriorityQueue: Grundlagen, Operationen und benutzerdefinierte Sortierung

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

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

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

MethodeBeschreibung
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

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java Kommentare: Typen, Verwendung und Best Practices
  3. Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
  4. Java Strings meistern: Erstellung, Methoden und Best Practices
  5. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  6. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  7. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  8. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
  9. Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
  10. Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList