Java PriorityQueue

I denna handledning lär vi oss om PriorityQueue-klassen i Java-samlingsramen med hjälp av exempel.

Den PriorityQueueklass ger funktionaliteten av högen datastruktur.

Det implementerar kögränssnittet.

Till skillnad från normala köer hämtas prioritetsköelement i sorterad ordning.

Antag att vi vill hämta element i stigande ordning. I det här fallet kommer prioritetsköns huvud att vara det minsta elementet. När detta element har hämtats kommer nästa minsta element att vara köets huvud.

Det är viktigt att notera att elementen i en prioritetskö inte kan sorteras. Element hämtas emellertid alltid i sorterad ordning.

Skapa PriorityQueue

För att skapa en prioritetskö måste vi importera java.util.PriorityQueuepaketet. När vi har importerat paketet, här är hur vi kan skapa en prioritetskö i Java.

 PriorityQueue numbers = new PriorityQueue(); 

Här har vi skapat en prioritetskö utan några argument. I det här fallet är huvudet på prioritetskön det minsta elementet i kön. Och element tas bort i stigande ordning från kön.

Vi kan dock anpassa beställningen av element med hjälp av Comparatorgränssnittet. Vi kommer att lära oss mer om det senare i den här handledningen.

Metoder för PriorityQueue

I PriorityQueueklassen ger genomförandet av alla metoder som finns i Queuegränssnittet.

Infoga element till PriorityQueue

  • add()- Infogar det angivna elementet i kön. Om kön är full ger det ett undantag.
  • offer()- Infogar det angivna elementet i kön. Om kön är full återgår den false.

Till exempel,

 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) Uppdaterad PriorityQueue: (1, 4, 2) 

Här har vi skapat en prioritetskö med nummer. Vi har lagt in 4 och 2 i kön.

Även om 4 infogas före 2 är köets huvud 2. Det beror på att huvudet på prioritetskön är det minsta elementet i kön.

Vi har sedan infört 1 i kön. Kön är nu omarrangerad för att lagra det minsta elementet 1 i köets huvud.

Åtkomst till PriorityQueue-element

För att komma åt element från en prioritetskö kan vi använda peek()metoden. Denna metod returnerar köhuvudet. Till exempel,

 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 

Ta bort PriorityQueue Elements

  • remove() - tar bort det angivna elementet från kön
  • poll() - återvänder och tar bort köets huvud

Till exempel,

 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) Är elementet 2 borttaget? sant borttaget element med hjälp av omröstning (): 1

Iterera över en PriorityQueue

För att itera över elementen i en prioritetskö kan vi använda iterator()metoden. För att kunna använda den här metoden måste vi importera java.util.Iteratorpaketet. Till exempel,

 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 med iterator (): 1, 4, 2, 

Andra PriorityQueue-metoder

Metoder Beskrivningar
contains(element) Söker i prioritetskön för det angivna elementet. Om elementet hittas returnerar det true, om inte det returneras false.
size() Returnerar längden på prioritetskön.
toArray() Konverterar en prioritetskö till en matris och returnerar den.

PriorityQueue Comparator

I alla exemplen ovan hämtas prioritetsköelement i naturlig ordning (stigande ordning). Vi kan dock anpassa denna beställning.

För detta måste vi skapa vår egen jämförarklass som implementerar Comparatorgränssnittet. Till exempel,

 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 exemplet ovan har vi skapat en prioritetskö som passerar CustomComparator-klassen som ett argument.

CustomComparator-klassen implementerar Comparatorgränssnittet.

Vi åsidosätter sedan compare()metoden. Metoden gör att elementets huvud är det största antalet.

För att lära dig mer om komparatorn, besök Java Comparator.

Intressanta artiklar...