Java PriorityQueue

I denne veiledningen vil vi lære om PriorityQueue-klassen i Java-samlingsrammeverket ved hjelp av eksempler.

Den PriorityQueueklasse 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.PriorityQueuepakken. 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 Comparatorgrensesnittet. Vi lærer om det senere i denne opplæringen.

Metoder for PriorityQueue

Den PriorityQueueklasse gir gjennomføring av alle de metoder som finnes i Queuegrensesnittet.

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 tilbake false.

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øen
  • poll() - 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.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(", "); ) ) ) 

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 Comparatorgrensesnittet. 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 Comparatorgrensesnittet.

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.

Interessante artikler...