I denne veiledningen vil vi lære om PriorityQueue-klassen i Java-samlingsrammeverket ved hjelp av eksempler.
Den PriorityQueue
klasse gir funksjonalitet av haugen datastrukturen.
Den implementerer køgrensesnittet.
I motsetning til normale køer blir prioriterte køelementer hentet i sortert rekkefølge.
Anta at vi ønsker å hente elementer i stigende rekkefølge. I dette tilfellet vil lederen av prioritetskøen være det minste elementet. Når dette elementet er hentet, vil det neste minste elementet være hodet til køen.
Det er viktig å merke seg at elementene i en prioritert kø kanskje ikke blir sortert. Elementene blir imidlertid alltid hentet i sortert rekkefølge.
Lage PriorityQueue
For å opprette en prioritetskø, må vi importere java.util.PriorityQueue
pakken. Når vi først har importert pakken, kan du opprette en prioritetskø i Java.
PriorityQueue numbers = new PriorityQueue();
Her har vi opprettet en prioritetskø uten argumenter. I dette tilfellet er hodet til prioritetskøen det minste elementet i køen. Og elementer fjernes i stigende rekkefølge fra køen.
Imidlertid kan vi tilpasse bestillingen av elementer ved hjelp av Comparator
grensesnittet. Vi lærer om det senere i denne opplæringen.
Metoder for PriorityQueue
Den PriorityQueue
klasse gir gjennomføring av alle de metoder som finnes i Queue
grensesnittet.
Sett inn elementer i PriorityQueue
add()
- Setter inn det angitte elementet i køen. Hvis køen er full, kaster den et unntak.offer()
- Setter inn det angitte elementet i køen. Hvis køen er full, kommer den tilbakefalse
.
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); ) )
Produksjon
PriorityQueue: (2, 4) Oppdatert PriorityQueue: (1, 4, 2)
Her har vi opprettet en prioritetskø med navn. Vi har satt inn 4 og 2 i køen.
Selv om 4 settes inn før 2, er køhodet 2. Det er fordi hodet til prioritetskøen er det minste elementet i køen.
Vi har da satt inn 1 i køen. Køen er nå omorganisert for å lagre det minste elementet 1 til hodet på køen.
Få tilgang til PriorityQueue-elementer
For å få tilgang til elementer fra en prioritert kø, kan vi bruke peek()
metoden. Denne metoden returnerer køhodet. 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); ) )
Produksjon
PriorityQueue: (1, 4, 2) Accessed Element: 1
Fjern PriorityQueue Elements
remove()
- fjerner det angitte elementet fra køenpoll()
- returnerer og fjerner hodet på køen
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); ) )
Produksjon
PriorityQueue: (1, 4, 2) Er elementet 2 fjernet? true Fjernet element ved hjelp av avstemning (): 1
Iterere over en PriorityQueue
For å itere over elementene i en prioritetskø, kan vi bruke iterator()
metoden. For å kunne bruke denne metoden, må vi importere java.util.Iterator
pakken. 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(", "); ) ) )
Produksjon
PriorityQueue ved hjelp av iterator (): 1, 4, 2,
Andre PriorityQueue-metoder
Metoder | Beskrivelser |
---|---|
contains(element) | Søker i prioritetskøen for det angitte elementet. Hvis elementet er funnet, returnerer det true , hvis ikke det returnerer false . |
size() | Returnerer lengden på prioritetskøen. |
toArray() | Konverterer en prioritetskø til en matrise og returnerer den. |
PriorityQueue Comparator
I alle eksemplene ovenfor blir prioritetskø-elementer hentet i naturlig rekkefølge (stigende rekkefølge). Vi kan imidlertid tilpasse denne bestillingen.
For dette må vi lage vår egen komparatorklasse som implementerer Comparator
grensesnittet. 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; ) ) )
Produksjon
PriorityQueue: (4, 3, 1, 2)
I eksemplet ovenfor har vi opprettet en prioritetskø som passerer CustomComparator-klassen som et argument.
CustomComparator-klassen implementerer Comparator
grensesnittet.
Vi overstyrer deretter compare()
metoden. Metoden får nå elementets hode til å være det største tallet.
For å lære mer om komparatoren, besøk Java Comparator.