U ovom ćemo uputstvu uz primjere naučiti o klasi PriorityQueue okvira Java zbirki.
PriorityQueue
Klase omogućava funkcionalnost hrpa strukture podataka.
Provodi sučelje reda čekanja.
Za razliku od normalnih redova, elementi prioritetnog reda dohvaćaju se poredanim redoslijedom.
Pretpostavimo da želimo dohvatiti elemente u rastućem redoslijedu. U tom će slučaju zaglavlje reda prioriteta biti najmanji element. Nakon što se ovaj element dohvati, sljedeći najmanji element bit će glava reda.
Važno je napomenuti da se elementi reda prioriteta ne mogu sortirati. Međutim, elementi se uvijek dohvaćaju razvrstanim redoslijedom.
Stvaranje PriorityQueue
Da bismo stvorili prioritetni red, moramo uvesti java.util.PriorityQueue
paket. Nakon što uvozimo paket, evo kako možemo stvoriti prioritetni red u Javi.
PriorityQueue numbers = new PriorityQueue();
Ovdje smo stvorili prioritetni red bez ikakvih argumenata. U ovom je slučaju zaglavlje reda prioriteta najmanji element reda. A elementi se uklanjaju uzlaznim redoslijedom iz reda.
Međutim, možemo prilagoditi redoslijed elemenata uz pomoć Comparator
sučelja. O tome ćemo saznati kasnije u ovom vodiču.
Metode PriorityQueue
PriorityQueue
Klasa osigurava provedbu svih metoda prisutnih u Queue
sučelju.
Umetanje elemenata u PriorityQueue
add()
- Ubacuje navedeni element u red čekanja. Ako je red pun, izbacuje iznimku.offer()
- Ubacuje navedeni element u red čekanja. Ako je red pun, vraća sefalse
.
Na primjer,
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); ) )
Izlaz
PriorityQueue: (2, 4) Ažurirani PriorityQueue: (1, 4, 2)
Ovdje smo stvorili prioritetni red s brojevima. U red smo umetnuli 4 i 2.
Iako je 4 umetnuto prije 2, glava reda je 2. To je zato što je glava reda prioriteta najmanji element reda.
Zatim smo u red umetnuli 1. Red čekanja sada je preuređen da spremi najmanji element 1 u glavu reda.
Pristupite elementima PriorityQueue
Za pristup elementima iz prioritetnog reda možemo koristiti peek()
metodu. Ova metoda vraća glavu reda. Na primjer,
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); ) )
Izlaz
PriorityQueue: (1, 4, 2) Pristupljeni element: 1
Uklonite elemente PriorityQueue
remove()
- uklanja navedeni element iz redapoll()
- vraća se i uklanja glavu reda
Na primjer,
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); ) )
Izlaz
PriorityQueue: (1, 4, 2) Je li element 2 uklonjen? true Uklonjeni element pomoću ankete (): 1
Iteriranje preko reda prioriteta
Za prelazak preko elemenata prioritetnog reda možemo koristiti iterator()
metodu. Da bismo koristili ovu metodu, moramo uvesti java.util.Iterator
paket. Na primjer,
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(", "); ) ) )
Izlaz
PriorityQueue pomoću iteratora (): 1, 4, 2,
Ostale metode PriorityQueue
Metode | Opisi |
---|---|
contains(element) | Pretražuje red prioriteta za navedeni element. Ako je element pronađen, on se vraća true , ako nije, vraća se false . |
size() | Vraća duljinu reda prioriteta. |
toArray() | Pretvara red prioriteta u niz i vraća ga. |
Usporednik PriorityQueue
U svim gornjim primjerima elementi prioritetnog reda dohvaćaju se prirodnim redoslijedom (rastućim redoslijedom). Međutim, ovu narudžbu možemo prilagoditi.
Za to moramo stvoriti vlastitu klasu usporedbe koja implementira Comparator
sučelje. Na primjer,
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; ) ) )
Izlaz
PriorityQueue: (4, 3, 1, 2)
U gornjem primjeru stvorili smo prioritetni red koji prosljeđuje klasu CustomComparator kao argument.
Klasa CustomComparator implementira Comparator
sučelje.
Zatim zamjenjujemo compare()
metodu. Metoda sada uzrokuje da je glava elementa najveći broj.
Da biste saznali više o usporedniku, posjetite Java Comparator.