V tej vadnici bomo s pomočjo primerov spoznali razred PriorityQueue okvira zbirk Java.
PriorityQueue
Razred zagotavlja funkcionalnost kup strukture podatkov.
Izvaja vmesnik Queue.
Za razliko od običajnih čakalnih vrst se prednostni elementi čakalne vrste pridobijo v razvrščenem vrstnem redu.
Recimo, da želimo pridobiti elemente v naraščajočem vrstnem redu. V tem primeru bo glava prednostne čakalne vrste najmanjši element. Ko je ta element pridobljen, bo naslednji najmanjši element glava čakalne vrste.
Pomembno je vedeti, da elementov prednostne čakalne vrste ni mogoče razvrstiti. Vendar se elementi vedno pridobijo v razvrščenem vrstnem redu.
Ustvarjanje PriorityQueue
Če želite ustvariti prednostno vrsto, moramo uvoziti java.util.PriorityQueue
paket. Ko uvozimo paket, lahko v Javi ustvarimo prednostno vrsto.
PriorityQueue numbers = new PriorityQueue();
Tu smo ustvarili prednostno vrsto brez kakršnih koli argumentov. V tem primeru je glava prednostne čakalne vrste najmanjši element čakalne vrste. In elementi se v čakalni vrsti odstranijo v naraščajočem vrstnem redu.
Razporeditev elementov pa lahko prilagodimo s pomočjo Comparator
vmesnika. O tem bomo izvedeli kasneje v tej vadnici.
Metode PriorityQueue
PriorityQueue
Razred zagotavlja izvajanje vseh metod, ki so prisotne v Queue
vmesniku.
Vstavite elemente v PriorityQueue
add()
- Vstavi določen element v čakalno vrsto. Če je vrsta polna, vrže izjemo.offer()
- Vstavi določen element v čakalno vrsto. Če je vrsta polna, se vrnefalse
.
Na primer
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); ) )
Izhod
PriorityQueue: (2, 4) Posodobljena PriorityQueue: (1, 4, 2)
Tu smo ustvarili prednostno vrsto z imenom številke. V čakalno vrsto smo vstavili 4 in 2.
Čeprav je 4 vstavljeno pred 2, je glava čakalne vrste 2. To je zato, ker je glava prednostne čakalne vrste najmanjši element čakalne vrste.
Nato smo v vrsto vstavili 1. Čakalna vrsta je zdaj preurejena tako, da najmanjši element 1 shrani v glavo čakalne vrste.
Dostopite do elementov PriorityQueue
Za dostop do elementov iz prednostne čakalne vrste lahko uporabimo peek()
metodo. Ta metoda vrne glavo čakalne vrste. Na primer
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); ) )
Izhod
PriorityQueue: (1, 4, 2) Dostopni element: 1
Odstranite elemente PriorityQueue
remove()
- odstrani navedeni element iz čakalne vrstepoll()
- vrne in odstrani glavo čakalne vrste
Na primer
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); ) )
Izhod
PriorityQueue: (1, 4, 2) Ali je element 2 odstranjen? true Odstranjeni element z uporabo ankete (): 1
Iteracija nad prioritetno vrsto
Za iteracijo elementov prednostne čakalne vrste lahko uporabimo iterator()
metodo. Za uporabo te metode moramo java.util.Iterator
paket uvoziti . Na primer
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(", "); ) ) )
Izhod
PriorityQueue z uporabo iteratorja (): 1, 4, 2,
Druge metode PriorityQueue
Metode | Opisi |
---|---|
contains(element) | Išče čakalno vrsto prioritet za navedeni element. Če je element najden, se vrne true , če ne, se vrne false . |
size() | Vrne dolžino prednostne čakalne vrste. |
toArray() | Pretvori prednostno vrsto v matriko in jo vrne. |
Primerjalnik vrst prioritet
V vseh zgornjih primerih so elementi prednostne čakalne vrste pridobljeni v naravnem vrstnem redu (naraščajoči vrstni red). Vendar lahko to naročilo prilagodimo.
Za to moramo ustvariti svoj primerjalni razred, ki izvaja Comparator
vmesnik. Na primer
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; ) ) )
Izhod
PriorityQueue: (4, 3, 1, 2)
V zgornjem primeru smo ustvarili prednostno vrsto, ki kot argument posreduje razred CustomComparator.
Razred CustomComparator izvaja Comparator
vmesnik.
Nato compare()
metodo preglasimo . Metoda zdaj povzroči, da je glava elementa največje število.
Če želite izvedeti več o primerjalniku, obiščite Java Comparator.