I denne vejledning lærer vi om PriorityQueue-klassen i Java-samlingens ramme ved hjælp af eksempler.
Den PriorityQueueklasse giver funktionalitet af den bunke datastruktur.
Det implementerer køgrænsefladen.

I modsætning til normale køer hentes prioritetskøelementer i sorteret rækkefølge.
Antag, vi vil hente elementer i stigende rækkefølge. I dette tilfælde vil hovedet på prioritetskøen være det mindste element. Når dette element er hentet, er det næste mindste element hovedet på køen.
Det er vigtigt at bemærke, at elementerne i en prioritetskø muligvis ikke sorteres. Elementer hentes dog altid i sorteret rækkefølge.
Oprettelse af PriorityQueue
For at oprette en prioritetskø skal vi importere java.util.PriorityQueuepakken. Når vi først har importeret pakken, kan vi her oprette en prioritetskø i Java.
PriorityQueue numbers = new PriorityQueue();
Her har vi oprettet en prioritetskø uden argumenter. I dette tilfælde er hovedet på prioritetskøen det mindste element i køen. Og elementer fjernes i stigende rækkefølge fra køen.
Vi kan dog tilpasse rækkefølgen af elementer ved hjælp af Comparatorgrænsefladen. Vi lærer om det senere i denne vejledning.
Metoder til PriorityQueue
Den PriorityQueueklasse giver gennemførelsen af alle de metoder, der er til stede i Queuegrænsefladen.
Indsæt elementer i PriorityQueue
add()- Indsætter det angivne element i køen. Hvis køen er fuld, kaster den en undtagelse.offer()- Indsætter det angivne element i køen. Hvis køen er fuld, vender den tilbagefalse.
For eksempel,
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); ) )
Produktion
PriorityQueue: (2, 4) Opdateret PriorityQueue: (1, 4, 2)
Her har vi oprettet en prioritetskø med numre. Vi har indsat 4 og 2 i køen.
Selvom 4 indsættes før 2, er køens hoved 2. Det skyldes, at hovedet på prioritetskøen er det mindste element i køen.
Vi har derefter indsat 1 i køen. Køen er nu arrangeret for at gemme det mindste element 1 til køens hoved.
Få adgang til PriorityQueue-elementer
For at få adgang til elementer fra en prioritetskø kan vi bruge peek()metoden. Denne metode returnerer køens hoved. For eksempel,
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); ) )
Produktion
PriorityQueue: (1, 4, 2) Accessed Element: 1
Fjern PriorityQueue Elements
remove()- fjerner det angivne element fra køenpoll()- vender tilbage og fjerner køens hoved
For eksempel,
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); ) )
Produktion
PriorityQueue: (1, 4, 2) Er elementet 2 fjernet? sandt fjernet element ved hjælp af afstemning (): 1
Iterering over en prioritetskue
For at gentage elementerne i en prioritetskø kan vi bruge iterator()metoden. For at kunne bruge denne metode skal vi importere java.util.Iteratorpakken. For eksempel,
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(", "); ) ) )
Produktion
PriorityQueue ved hjælp af iterator (): 1, 4, 2,
Andre PriorityQueue-metoder
| Metoder | Beskrivelser |
|---|---|
contains(element) | Søger i prioritetskøen efter det angivne element. Hvis elementet findes, returnerer det true, hvis ikke det returnerer false. |
size() | Returnerer længden af prioritetskøen. |
toArray() | Konverterer en prioritetskø til en matrix og returnerer den. |
PriorityQueue-komparator
I alle eksemplerne ovenfor hentes elementerne i den prioriterede kø i den naturlige rækkefølge (stigende rækkefølge). Vi kan dog tilpasse denne bestilling.
Til dette er vi nødt til at oprette vores egen komparatorklasse, der implementerer Comparatorgrænsefladen. For eksempel,
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; ) ) )
Produktion
PriorityQueue: (4, 3, 1, 2)
I ovenstående eksempel har vi oprettet en prioritetskø, der passerer CustomComparator-klassen som et argument.
CustomComparator-klassen implementerer Comparatorgrænsefladen.
Vi tilsidesætter derefter compare()metoden. Metoden får nu elementets hoved til at være det største tal.
Hvis du vil lære mere om komparatoren, skal du besøge Java Comparator.








