В този урок ще научим за класа PriorityQueue на рамката за колекции на Java с помощта на примери.
В PriorityQueueклас осигурява функционалността на купчина структурата на данните.
Той реализира интерфейса на опашката.

За разлика от нормалните опашки, приоритетните елементи на опашката се извличат в сортиран ред.
Да предположим, че искаме да извлечем елементи във възходящ ред. В този случай главата на приоритетната опашка ще бъде най-малкият елемент. След като този елемент бъде извлечен, следващият най-малък елемент ще бъде главата на опашката.
Важно е да се отбележи, че елементите на приоритетна опашка не могат да бъдат сортирани. Елементите обаче винаги се извличат в сортиран ред.
Създаване на PriorityQueue
За да създадем приоритетна опашка, трябва да импортираме java.util.PriorityQueueпакета. След като импортираме пакета, ето как можем да създадем приоритетна опашка в Java.
 PriorityQueue numbers = new PriorityQueue(); 
Тук създадохме приоритетна опашка без никакви аргументи. В този случай главата на приоритетната опашка е най-малкият елемент на опашката. И елементите се отстраняват във възходящ ред от опашката.
Въпреки това можем да персонализираме подреждането на елементи с помощта на Comparatorинтерфейса. Ще научим за това по-късно в този урок.
Методи на PriorityQueue
В PriorityQueueклас осигурява изпълнението на всички методи, присъстващи в Queueинтерфейса.
Вмъкване на елементи в PriorityQueue
- 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); ) ) 
Изход
PriorityQueue: (2, 4) Актуализирана PriorityQueue: (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); ) ) 
Изход
PriorityQueue: (1, 4, 2) Достъпен елемент: 1
Премахнете елементите на PriorityQueue
- 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); ) ) 
Изход
PriorityQueue: (1, 4, 2) Премахнат ли е елемент 2? true Премахнат елемент с помощта на анкета (): 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(", "); ) ) ) 
Изход
PriorityQueue с използване на итератор (): 1, 4, 2,
Други методи на приоритетната опашка
| Методи | Описания | 
|---|---|
| contains(element) | Търси опашката с приоритет за посочения елемент. Ако елементът бъде намерен, той се връща true, ако не се връщаfalse. | 
| size() | Връща дължината на опашката с приоритет. | 
| toArray() | Преобразува приоритетна опашка в масив и го връща. | 
PriorityQueue Comparator
Във всички примери по-горе елементите на опашката с приоритет се извличат в естествения ред (възходящ ред). Въпреки това можем да персонализираме тази поръчка.
За това трябва да създадем собствен клас за сравнение, който реализира 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; ) ) ) 
Изход
PriorityQueue: (4, 3, 1, 2)
В горния пример създадохме приоритетна опашка, предаваща клас CustomComparator като аргумент.
Класът CustomComparator изпълнява Comparatorинтерфейса.
След това заместваме compare()метода. Сега методът кара главата на елемента да бъде най-голямото число.
За да научите повече за компаратора, посетете Java Comparator.








