Java PriorityQueue

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 tilbage 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); ) ) 

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

Interessante artikler...