Java PriorityQueue

U ovom ćemo uputstvu uz primjere naučiti o klasi PriorityQueue okvira Java zbirki.

PriorityQueueKlase 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.PriorityQueuepaket. 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ć Comparatorsučelja. O tome ćemo saznati kasnije u ovom vodiču.

Metode PriorityQueue

PriorityQueueKlasa osigurava provedbu svih metoda prisutnih u Queuesuč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 se false.

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 reda
  • poll() - 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.Iteratorpaket. 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 Comparatorsuč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 Comparatorsuč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.

Zanimljivi članci...