Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

PriorityQueue

Очередь, которая всегда выдаёт наименьший (или самый приоритетный) элемент.

Доступно с: Java 1.5

Синтаксис

public class PriorityQueue<E> extends AbstractQueue<E>

Примеры

Числа выходят по возрастанию:

void main() {
    Queue<Integer> pq = new PriorityQueue<>(List.of(5, 1, 8, 3));
    while (!pq.isEmpty()) {
        IO.print(pq.poll() + " ");
    }
    IO.println("");
}

Результат:

1 3 5 8

Задачи по приоритету через компаратор:

record Task(String name, int priority) {}
 
void main() {
    var pq = new PriorityQueue<>(Comparator.comparingInt(Task::priority).reversed());
    pq.offer(new Task("email", 1));
    pq.offer(new Task("bugfix", 5));
    pq.offer(new Task("review", 3));
    IO.println(pq.poll().name());
    IO.println(pq.poll().name());
}

Результат:

bugfix
review

Примечания

offer() и poll() работают за логарифмическое время, peek() — мгновенно. Печать очереди или обход циклом не дают отсортированного порядка: отсортирован только порядок выдачи через poll(). По умолчанию первым выходит наименьший элемент; для наибольшего передайте Comparator.reverseOrder().

См. также

  • Queue — Очередь: элементы добавляются в конец и забираются из начала.
  • ArrayDeque — Быстрая двусторонняя очередь на массиве — замена `Stack` и `LinkedList`.
  • Comparator.comparing() — Создаёт компаратор, который сравнивает объекты по одному полю.
  • TreeSet — Множество, которое хранит элементы в отсортированном порядке.

Вопросы и ответы по теме

В учебнике

  • Очереди и деки — Очереди в Java: Queue и ArrayDeque, стек на основе Deque, методы offer, poll и peek, очередь с приоритетом PriorityQueue.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.