Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpCoPq 211 of 322 menu
◀ ▶

Очередь с приоритетом в Java

Класс PriorityQueue хранит элементы так, что poll всегда забирает «главный» по правилам Comparable или переданного Comparator. Внутри используется куча, поэтому добавление и извлечение стоят порядка O(log n).

Очередь не сортирует весь набор при каждом шаге: минимум лежит в корне, остальной порядок внутри может быть произвольным, пока вы только снимаете голову.

Очередь заявок по срочности, где меньшее число важнее:

import java.util.PriorityQueue; import java.util.Queue; public class Main { public static void main(String[] args) { Queue<Integer> urgent = new PriorityQueue<>(); urgent.offer(30); urgent.offer(5); urgent.offer(20); System.out.println(urgent.poll()); System.out.println(urgent.poll()); } }

Сначала уйдут 5 и 20, хотя вставка шла в другом порядке. Для строк сработает лексикографический порядок String.

Если нужен обратный приоритет, передайте компаратор в конструктор:

import java.util.Comparator; import java.util.PriorityQueue; public class Main { public static void main(String[] args) { var byDesc = new PriorityQueue<Integer>( Comparator.reverseOrder() ); byDesc.offer(10); byDesc.offer(40); System.out.println(byDesc.poll()); } }

Соберите очередь с числами 8, 2, 5 и выведите два первых результата poll.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить