Как уже упоминалось, классы PriorityQueue
внутренне поддерживают двоичную кучу , и порядок элементов в этой куче определяется либо порядком по умолчанию, либо компаратором. Двоичная куча поддерживается в списке.
Ваш вопрос спрашивает, когда элементы заказаны. Когда вы добавляете элемент в очередь или удаляете элемент из очереди, порядок элементов перестраивается таким образом, чтобы элемент с наивысшим приоритетом находился в верхней части кучи: с индексом 0 в списке. Таким образом, ответ на ваш главный вопрос заключается в том, что PriorityQueue
всегда знает, какой элемент имеет самый высокий приоритет. Это делает функцию peek()
очень эффективной.
Порядок пунктов в остальной части списка немного сложнее. Остальная часть списка упорядочена , но не обязательно отсортирована . Порядок таков, что перестановка кучи после вставки или удаления эффективна. См. Вышеупомянутую статью о двоичных кучах для деталей об упорядочении кучи.