В каком порядке выдаёт элементы итерация (for-each) по PriorityQueue?
Итерация по PriorityQueue не отсортирована: куча гарантирует только «родитель ≤ детей». Отсортированный порядок даёт лишь повторный poll().
- toString и for-each показывают массив кучи как есть
- Отсортировать — poll() в цикле или скопировать и отсортировать
- peek и poll возвращают минимум по Comparable или компаратору
А ещё Классическая ловушка: «распечатал очередь — порядок неправильный»
Подробно
PriorityQueue — бинарная куча в массиве: гарантируется лишь свойство кучи (родитель не больше детей), а не полный порядок. Поэтому for-each/toString выдают элементы как они лежат в массиве; отсортированную последовательность получают, многократно вызывая poll(). Это классическая ловушка «распечатал очередь и жду сортировки».
Что хотят услышать
- Свойство кучи и почему итерация не отсортирована.
- Как получить порядок.
Частые ошибки
- Ждать отсортированный обход PriorityQueue.
- Полагаться на порядок toString().
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓В частично упорядоченном порядке кучи; сортировку даёт только poll()
- ✗Строго по возрастанию приоритета — итератор обходит кучу в отсортированном порядке
- ✗В порядке вставки (FIFO)
- ✗В обратном порядке вставки (LIFO)
Что спросят дальше
- Какая сложность у poll() в куче?
- Как получить отсортированный список из кучи?
Разбор темы
- Очереди и стек: ArrayDeque и PriorityQueue
ArrayDeque как кольцевой буфер и замена Stack, PriorityQueue как бинарная куча и её неотсортированная итерация.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.