Šajā apmācībā mēs ar piemēru palīdzību uzzināsim par Java kolekciju ietvaru PriorityQueue klasi.
PriorityQueue
Klase nodrošina funkcionalitāti kaudzes datu struktūru.
Tas ievieš rindas saskarni.
Atšķirībā no parastajām rindām prioritārie rindas elementi tiek izgūti sakārtotā secībā.
Pieņemsim, ka mēs vēlamies iegūt elementus augošā secībā. Šajā gadījumā prioritārās rindas galva būs mazākais elements. Kad šis elements ir iegūts, nākamais mazākais elements būs rindas galva.
Ir svarīgi atzīmēt, ka prioritārās rindas elementus var nešķirot. Tomēr elementi vienmēr tiek izgūti sakārtotā secībā.
Izveido PriorityQueue
Lai izveidotu prioritāru rindu, mums ir jāimportē java.util.PriorityQueue
pakete. Kad pakotne ir importēta, šeit mēs varam izveidot prioritāru rindu Java.
PriorityQueue numbers = new PriorityQueue();
Šeit mēs esam izveidojuši prioritāru rindu bez jebkādiem argumentiem. Šajā gadījumā prioritārās rindas galva ir mazākais rindas elements. Un elementi tiek noņemti augošā secībā no rindas.
Tomēr ar Comparator
saskarnes palīdzību mēs varam pielāgot elementu secību . Par to mēs uzzināsim vēlāk šajā apmācībā.
PriorityQueue metodes
PriorityQueue
Klase nodrošina īstenošanu visas metodes, kas atrodas Queue
interfeisu.
Ievietojiet elementus PriorityQueue
add()
- ievieto norādīto elementu rindā. Ja rinda ir pilna, tas rada izņēmumu.offer()
- ievieto norādīto elementu rindā. Ja rinda ir pilna, tā atgriežasfalse
.
Piemēram,
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); ) )
Rezultāts
PriorityQueue: (2, 4) Atjaunināta PriorityQueue: (1, 4, 2)
Šeit mēs esam izveidojuši prioritāru rindu ar numuriem. Mēs esam ievietojuši rindā 4 un 2.
Lai gan 4 ir ievietots pirms 2, rindas galva ir 2. Tas ir tāpēc, ka prioritārās rindas galva ir mazākais rindas elements.
Pēc tam mēs esam ievietojuši 1 rindā. Tagad rinda ir pārkārtota, lai vismazākais elements 1 tiktu saglabāts rindas galā.
Piekļūstiet PriorityQueue Elements
Lai piekļūtu elementiem no prioritārās rindas, mēs varam izmantot peek()
metodi. Šī metode atgriež rindas galvu. Piemēram,
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); ) )
Rezultāts
PriorityQueue: (1, 4, 2) Piekļūtais elements: 1
Noņemiet PriorityQueue elementus
remove()
- noņem norādīto elementu no rindaspoll()
- atgriežas un noņem rindas galvu
Piemēram,
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); ) )
Rezultāts
PriorityQueue: (1, 4, 2) Vai elements 2 ir noņemts? true Noņemts elements, izmantojot aptauju (): 1
Atkārtota pār PriorityQueue
Lai atkārtotu prioritātes rindas elementus, mēs varam izmantot iterator()
metodi. Lai izmantotu šo metodi, mums ir jāimportē java.util.Iterator
pakotne. Piemēram,
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(", "); ) ) )
Rezultāts
PriorityQueue, izmantojot iteratoru (): 1, 4, 2,
Citas PriorityQueue metodes
Metodes | Apraksti |
---|---|
contains(element) | Meklē norādītā elementa prioritātes rindu. Ja elements ir atrasts, tas atgriežas true , ja nē, tas atgriežas false . |
size() | Atgriež prioritārās rindas garumu. |
toArray() | Pārvērš prioritāro rindu masīvā un atgriež to. |
PriorityQueue Comparator
Visos iepriekš minētajos piemēros prioritārās rindas elementi tiek izgūti dabiskajā secībā (augošā secībā). Tomēr mēs varam pielāgot šo pasūtīšanu.
Lai to izdarītu, mums ir jāizveido sava salīdzināmā klase, kas īsteno Comparator
saskarni. Piemēram,
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; ) ) )
Rezultāts
PriorityQueue: (4, 3, 1, 2)
Iepriekš minētajā piemērā mēs esam izveidojuši prioritātes rindu, kas kā argumentu nodod klasi CustomComparator.
Klase CustomComparator ievieš Comparator
saskarni.
Pēc tam mēs ignorējam compare()
metodi. Metode tagad izraisa tā, ka elementa galva ir vislielākais skaitlis.
Lai uzzinātu vairāk par salīdzinātāju, apmeklējiet Java Comparator.