I denna handledning lär vi oss om PriorityQueue-klassen i Java-samlingsramen med hjälp av exempel.
Den PriorityQueue
klass 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.PriorityQueue
paketet. 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 Comparator
gränssnittet. Vi kommer att lära oss mer om det senare i den här handledningen.
Metoder för PriorityQueue
I PriorityQueue
klassen ger genomförandet av alla metoder som finns i Queue
grä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 denfalse
.
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önpoll()
- å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.Iterator
paketet. 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 Comparator
grä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 Comparator
grä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.