Java PriorityQueue

In deze tutorial leren we met behulp van voorbeelden over de PriorityQueue-klasse van het Java Collections-framework.

De PriorityQueueklasse biedt de functionaliteit van de heap-gegevensstructuur.

Het implementeert de wachtrij-interface.

In tegenstelling tot normale wachtrijen worden prioritaire wachtrijelementen in gesorteerde volgorde opgehaald.

Stel dat we elementen in oplopende volgorde willen ophalen. In dit geval is de kop van de prioriteitswachtrij het kleinste element. Zodra dit element is opgehaald, wordt het volgende kleinste element de kop van de wachtrij.

Het is belangrijk op te merken dat de elementen van een prioriteitswachtrij mogelijk niet zijn gesorteerd. Elementen worden echter altijd in gesorteerde volgorde opgehaald.

PriorityQueue maken

Om een ​​prioriteitswachtrij te maken, moeten we het java.util.PriorityQueuepakket importeren . Nadat we het pakket hebben geïmporteerd, kunnen we als volgt een prioriteitswachtrij in Java maken.

 PriorityQueue numbers = new PriorityQueue(); 

Hier hebben we een prioriteitswachtrij gemaakt zonder argumenten. In dit geval is de kop van de prioriteitswachtrij het kleinste element van de wachtrij. En elementen worden in oplopende volgorde uit de wachtrij verwijderd.

We kunnen de volgorde van elementen echter aanpassen met behulp van de Comparatorinterface. We zullen daar later in deze tutorial over leren.

Methoden van PriorityQueue

De PriorityQueueklasse zorgt voor de implementatie van alle methoden die in de Queueinterface aanwezig zijn.

Voeg elementen toe aan PriorityQueue

  • add()- Voegt het opgegeven element in de wachtrij in. Als de wachtrij vol is, wordt er een uitzondering gegenereerd.
  • offer()- Voegt het opgegeven element in de wachtrij in. Als de wachtrij vol is, keert deze terug false.

Bijvoorbeeld,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); // Using the add() method numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: " + numbers); // Using the offer() method numbers.offer(1); System.out.println("Updated PriorityQueue: " + numbers); ) ) 

Uitvoer

 PriorityQueue: (2, 4) Bijgewerkte PriorityQueue: (1, 4, 2) 

Hier hebben we een prioriteitswachtrij gemaakt met de naam nummers. We hebben 4 en 2 in de wachtrij geplaatst.

Hoewel 4 wordt ingevoegd vóór 2, is de kop van de wachtrij 2. Dit komt doordat de kop van de prioriteitswachtrij het kleinste element van de wachtrij is.

We hebben er dan 1 in de wachtrij geplaatst. De wachtrij is nu herschikt om het kleinste element 1 aan de kop van de wachtrij op te slaan.

Toegang tot PriorityQueue-elementen

Om toegang te krijgen tot elementen uit een prioriteitswachtrij, kunnen we de peek()methode gebruiken. Deze methode retourneert de kop van de wachtrij. Bijvoorbeeld,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the peek() method int number = numbers.peek(); System.out.println("Accessed Element: " + number); ) ) 

Uitvoer

 PriorityQueue: (1, 4, 2) Betreden element: 1 

Verwijder PriorityQueue-elementen

  • remove() - verwijdert het opgegeven element uit de wachtrij
  • poll() - keert terug en verwijdert de kop van de wachtrij

Bijvoorbeeld,

 import java.util.PriorityQueue; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the remove() method boolean result = numbers.remove(2); System.out.println("Is the element 2 removed? " + result); // Using the poll() method int number = numbers.poll(); System.out.println("Removed Element Using poll(): " + number); ) ) 

Uitvoer

PriorityQueue: (1, 4, 2) Is element 2 verwijderd? true Verwijderd element met poll (): 1

Itereren over een PriorityQueue

Om de elementen van een prioriteitswachtrij te herhalen, kunnen we de iterator()methode gebruiken. Om deze methode te gebruiken, moeten we het java.util.Iteratorpakket importeren . Bijvoorbeeld,

 import java.util.PriorityQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue numbers = new PriorityQueue(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue using iterator(): "); //Using the iterator() method Iterator iterate = numbers.iterator(); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Uitvoer

 PriorityQueue met iterator (): 1, 4, 2, 

Andere PriorityQueue-methoden

Methoden Beschrijvingen
contains(element) Zoekt in de prioriteitswachtrij naar het opgegeven element. Als het element wordt gevonden, keert het terug true, zo niet, dan keert het terug false.
size() Retourneert de lengte van de prioriteitswachtrij.
toArray() Converteert een prioriteitswachtrij naar een array en retourneert deze.

PriorityQueue Comparator

In alle bovenstaande voorbeelden worden prioriteitswachtrijelementen opgehaald in de natuurlijke volgorde (oplopende volgorde). We kunnen deze volgorde echter aanpassen.

Hiervoor moeten we onze eigen comparator-klasse maken die de Comparatorinterface implementeert . Bijvoorbeeld,

 import java.util.PriorityQueue; import java.util.Comparator; class Main ( public static void main(String() args) ( // Creating a priority queue PriorityQueue 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 ( @Override public int compare(Integer number1, Integer number2) ( int value = number1.compareTo(number2); // elements are sorted in reverse order if (value> 0) ( return -1; ) else if (value < 0) ( return 1; ) else ( return 0; ) ) ) 

Uitvoer

 PriorityQueue: (4, 3, 1, 2) 

In het bovenstaande voorbeeld hebben we een prioriteitswachtrij gemaakt die de klasse CustomComparator als een argument doorgeeft.

De CustomComparator-klasse implementeert de Comparatorinterface.

We overschrijven dan de compare()methode. De methode zorgt er nu voor dat de kop van het element het grootste getal is.

Bezoek Java Comparator voor meer informatie over de comparator.

Interessante artikelen...