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 в заголовке очереди.

Доступ к элементам PriorityQueue

Чтобы получить доступ к элементам из приоритетной очереди, мы можем использовать 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 Удаленный элемент с помощью poll (): 1

Итерация PriorityQueue

Чтобы перебрать элементы очереди с приоритетом, мы можем использовать 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 с использованием iterator (): 1, 4, 2, 

Другие методы PriorityQueue

Методы Описания
contains(element) Ищет указанный элемент в очереди с приоритетом. Если элемент найден, он возвращается true, если нет - возвращается false.
size() Возвращает длину очереди с приоритетом.
toArray() Преобразует приоритетную очередь в массив и возвращает его.

Компаратор PriorityQueue

Во всех приведенных выше примерах элементы очереди с приоритетом извлекаются в естественном порядке (в порядке возрастания). Однако мы можем настроить этот порядок.

Для этого нам нужно создать собственный класс компаратора, реализующий 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.

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