У овом упутству ћемо научити о класи ПриоритиКуеуе оквира Јава колекција уз помоћ примера.
PriorityQueue
Класа обезбеђује функционалност гомиле структуре података.
Примењује интерфејс реда.
За разлику од нормалних редова, елементи приоритетног реда дохваћају се пореданим редоследом.
Претпоставимо да желимо да дохватимо елементе у растућем редоследу. У овом случају, глава реда приоритета биће најмањи елемент. Једном када је овај елемент преузет, следећи најмањи елемент биће глава реда.
Важно је напоменути да се елементи приоритетног реда не могу сортирати. Међутим, елементи се увек преузимају у сортираном редоследу.
Креирање ПриоритиКуеуе
Да бисмо креирали приоритетни ред, морамо увозити java.util.PriorityQueue
пакет. Једном када увозимо пакет, ево како можемо створити приоритетни ред у Јави.
PriorityQueue numbers = new PriorityQueue();
Овде смо креирали приоритетни ред без икаквих аргумената. У овом случају, глава реда приоритета је најмањи елемент реда. А елементи се уклањају у узлазном редоследу из реда.
Међутим, редослед елемената можемо прилагодити помоћу Comparator
интерфејса. О томе ћемо сазнати касније у овом водичу.
Методе ПриоритиКуеуе
PriorityQueue
Класа обезбеђује примену свих метода присутне у Queue
интерфејсу.
Уметните елементе у ПриоритиКуеуе
add()
- Убацује наведени елемент у ред. Ако је ред пун, то доводи до изузетка.offer()
- Убацује наведени елемент у ред. Ако је ред пун, враћа сеfalse
.
На пример,
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); ) )
Оутпут
ПриоритиКуеуе: (2, 4) Ажурирано ПриоритиКуеуе: (1, 4, 2)
Овде смо креирали приоритетни ред са бројевима. У ред смо убацили 4 и 2.
Иако је 4 уметнуто пре 2, глава реда је 2. То је зато што је глава реда приоритета најмањи елемент реда.
Затим смо у ред убацили 1. Ред је сада преуређен да спреми најмањи елемент 1 у главу реда.
Приступите елементима ПриоритиКуеуе
Да бисмо приступили елементима из приоритетног реда, можемо користити peek()
методу. Ова метода враћа главу реда. На пример,
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); ) )
Оутпут
ПриоритиКуеуе: (1, 4, 2) Приступљени елемент: 1
Уклоните елементе ПриоритиКуеуе
remove()
- уклања наведени елемент из редаpoll()
- враћа се и уклања главу реда
На пример,
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); ) )
Оутпут
ПриоритиКуеуе: (1, 4, 2) Да ли је елемент 2 уклоњен? труе Уклоњени елемент помоћу анкете (): 1
Итерирање преко реда приоритета
Да бисмо прешли преко елемената приоритетног реда, можемо користити iterator()
методу. Да бисмо користили овај метод, морамо увозити java.util.Iterator
пакет. На пример,
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(", "); ) ) )
Оутпут
ПриоритиКуеуе помоћу итератора (): 1, 4, 2,
Остале методе ПриоритиКуеуе
Методе | Описи |
---|---|
contains(element) | Претражује ред приоритета за наведени елемент. Ако је елемент пронађен, он се враћа true , ако не, враћа се false . |
size() | Враћа дужину реда приоритета. |
toArray() | Претвара ред приоритета у низ и враћа га. |
ПриоритиКуеуе Цомпаратор
У свим горњим примерима елементи приоритетног реда се преузимају у природном редоследу (растући редослед). Међутим, ово прилагођавање можемо прилагодити.
За ово морамо да створимо сопствену класу упоређивача која имплементира Comparator
интерфејс. На пример,
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; ) ) )
Оутпут
ПриоритиКуеуе: (4, 3, 1, 2)
У горњем примеру створили смо приоритетни ред који прослеђује класу ЦустомЦомпаратор као аргумент.
Класа ЦустомЦомпаратор имплементира Comparator
интерфејс.
Затим заменимо compare()
методу. Метода сада доводи до тога да је глава елемента највећи број.
Да бисте сазнали више о упоређивачу, посетите Јава Цомпаратор.