Java PriorityQueue

В този урок ще научим за класа 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.

Интересни статии...