Šioje pamokoje su pavyzdžių pagalba sužinosime apie „Java“ kolekcijų sistemos „PriorityQueue“ klasę.
PriorityQueue
Klasės modeliai užtikrina krūvos duomenų struktūros funkcionalumą.
Tai įgyvendina sąsają „Eilė“.
Skirtingai nuo įprastų eilių, prioritetinės eilės elementai gaunami rūšiuojama tvarka.
Tarkime, mes norime gauti elementus didėjimo tvarka. Šiuo atveju prioritetinės eilės galva bus mažiausias elementas. Kai šis elementas bus gautas, kitas mažiausias elementas bus eilės galva.
Svarbu pažymėti, kad prioritetinės eilės elementai gali būti nerūšiuoti. Tačiau elementai visada gaunami rūšiuojama tvarka.
Kuriama „PriorityQueue“
Norėdami sukurti prioritetinę eilę, turime importuoti java.util.PriorityQueue
paketą. Kai importuosime paketą, štai kaip galime sukurti „Java“ prioritetinę eilę.
PriorityQueue numbers = new PriorityQueue();
Čia sukūrėme prioritetinę eilę be jokių argumentų. Šiuo atveju prioritetinės eilės galva yra mažiausias eilės elementas. Elementai pašalinami didėjančia tvarka iš eilės.
Tačiau Comparator
sąsajos pagalba galime pritaikyti elementų išdėstymą. Apie tai sužinosime vėliau šioje pamokoje.
„PriorityQueue“ metodai
PriorityQueue
Klasė suteikia visų metodų esančių įgyvendinimą Queue
sąsaja.
Įterpti elementus į „PriorityQueue“
add()
- Įterpia nurodytą elementą į eilę. Jei eilė pilna, tai išmeta išimtį.offer()
- Įterpia nurodytą elementą į eilę. Jei eilė pilna, ji grįžtafalse
.
Pavyzdžiui,
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); ) )
Rezultatas
„PriorityQueue“: (2, 4) Atnaujinta „PriorityQueue“: (1, 4, 2)
Čia mes sukūrėme prioritetinę eilę, pavadintą numeriais. Į eilę įterpėme 4 ir 2.
Nors 4 įterpiamas prieš 2, eilės galva yra 2. Taip yra todėl, kad prioritetinės eilės galva yra mažiausias eilės elementas.
Tada mes įterpėme 1 į eilę. Dabar eilė pertvarkyta, kad mažiausias elementas 1 būtų saugomas eilės galvutėje.
Prieiga prie „PriorityQueue“ elementų
Norėdami pasiekti elementus iš prioritetinės eilės, galime naudoti peek()
metodą. Šis metodas pateikia eilės galvą. Pavyzdžiui,
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); ) )
Rezultatas
„PriorityQueue“: (1, 4, 2) pasiektas elementas: 1
Pašalinkite „PriorityQueue“ elementus
remove()
- pašalina nurodytą elementą iš eilėspoll()
- grįžta ir nuima eilės galvą
Pavyzdžiui,
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); ) )
Rezultatas
„PriorityQueue“: (1, 4, 2) Ar 2 elementas pašalintas? true Pašalintas elementas naudojant apklausą (): 1
Kartojasi per prioritetinę eilę
Norėdami pakartoti prioritetinės eilės elementus, galime naudoti iterator()
metodą. Norėdami naudoti šį metodą, turime importuoti java.util.Iterator
paketą. Pavyzdžiui,
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(", "); ) ) )
Rezultatas
„PriorityQueue“ naudojant iteratorių (): 1, 4, 2,
Kiti „PriorityQueue“ metodai
Metodai | Aprašymai |
---|---|
contains(element) | Ieško nurodyto elemento prioritetinės eilės. Jei elementas yra rastas, jis grįžta true , jei ne, jis grįžta false . |
size() | Grąžina prioritetinės eilės ilgį. |
toArray() | Konvertuoja prioritetinę eilę į masyvą ir grąžina ją. |
„PriorityQueue Comparator“
Visuose aukščiau pateiktuose pavyzdžiuose prioritetinės eilės elementai gaunami natūralia tvarka (didėjimo tvarka). Tačiau mes galime pritaikyti šį užsakymą.
Tam turime sukurti savo lyginamąją klasę, kuri įgyvendintų Comparator
sąsają. Pavyzdžiui,
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; ) ) )
Rezultatas
„PriorityQueue“: (4, 3, 1, 2)
Ankstesniame pavyzdyje mes sukūrėme prioritetinę eilę, perduodančią „CustomComparator“ klasę kaip argumentą.
„CustomComparator“ klasė įgyvendina Comparator
sąsają.
Tada mes nepaisome compare()
metodo. Pagal šį metodą elemento galva yra didžiausias skaičius.
Norėdami sužinoti daugiau apie palyginimą, apsilankykite „Java Comparator“.