Пример использования Java Priority Queue (PriorityQueue)

Все мы знаем, что очереди работают по следующей модели: FIFO (First In First Out — «первым пришёл — первым ушёл»), но иногда появляется необходимость обрабатывать объекты в очереди, основанной на приоритете. Например, у нас есть приложение, которое генерирует отчеты и обрабатывает большое количество данных, которые требуют много время на обработку. Когда клиенты посылают запросы к нашему приложению, то образуется очередь, но мы хотим обработать премиум клиентов первыми, а обычных клиентов уже после них. Именно в этом случае нам будет лучше всего использовать PriorityQueue.

Кратко о PriorityQueue

  • Класс PriorityQueue был введен в Java 1.5 и является частью Java Collections Framework. PriorityQueue является неограниченной очередью. Элементы упорядочены по умолчанию в естественном порядке или же отсортированы с помощью компаратора.
  • PriorityQueue не позволяет добавлять null-значения и non-comparable объекты. Размер приоритетной очереди (PriorityQueue) неограничен, но мы можем указать начальный размер в момент его создания. Когда мы добавляем элементы в приоритетную очередь, её размер увеличивается автоматически.
  • PriorityQueue не является потобезопасной! Для этих целей в Java реализован класс PriorityBlockingQueue, реализующий интерфейс BlockingQueue. Именно он используется в многопоточной среде.
  • В PriorityQueue добавление/удаление элементов происходит за время O(log(n)).

Пример использования PriorityQueue на Java

Давайте посмотрим реализацию PriorityQueue для естественного порядка добавления элементов, а также пример PriorityQueue с компаратором:

Первым делом создадим класс Customer.java

Мы будем использовать генерацию случайных чисел для генерации случайных объектов клиентов. Для естественного порядка добавления элементов будем использовать Integer, который в Java является классом-оболочкой.

Вот окончательный код, который показывает, как использовать PriorityQueue.

PriorityQueueExample.java

Обратите внимание, что мы используем анонимный класс для реализации интерфейса компаратора и создания компаратора на основе идентификаторов id.

Результат выполнения программы будет следующий:

Вот и все, что нужно знать о PriorityQueue. Если вам понравилась эта статья, пожалуйста, поделитесь с друзьями или оставьте комментарий.

Хотите узнать больше о памяти в Java? Тогда вот интересный материал о том, что такое Heap и Stack память в Java.

One thought to “Пример использования Java Priority Queue (PriorityQueue)”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *