«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему метод Java PriorityQueue `toString` не отражает порядок элементов, определенный компаратором?

Почему метод Java PriorityQueue `toString` не отражает порядок элементов, определенный компаратором?

Опубликовано 9 ноября 2024 г.
Просматривать:303

Why does Java\'s PriorityQueue `toString` method not reflect the element order defined by the Comparator?

Как метод toString класса PriorityQueue вводит в заблуждение при интерпретации порядка элементов

В Java структура данных PriorityQueue поддерживает двоичную кучу для определения приоритета элементов на основе их назначений стратегия сравнения. Эта стратегия обычно реализуется с помощью специального компаратора, как показано в предоставленном фрагменте кода. Однако существует распространенное заблуждение относительно порядка элементов при изучении выходных данных метода toString PriorityQueue.

Метод toString предназначен для предоставления текстового представления содержимого PriorityQueue. Однако он неявно не обеспечивает соблюдение порядка приоритетов, определенного Компаратором. Вместо этого он просто отображает элементы в их текущих позициях в куче, что может не соответствовать ожидаемому порядку сортировки.

В данном примере PriorityQueue инициализируется с помощью специального компаратора для определения приоритета значений частоты. Вы хотели, чтобы выходные данные отражали этот порядок, причем элементы с более низкими частотами были указаны первыми. Однако выходные данные метода toString показывают неверный порядок, очевидно, противоречащий предполагаемому приоритету.

Причина этого несоответствия кроется во внутренней структуре двоичной кучи. Хотя он поддерживает частичный порядок, элементы не сортируются полностью, пока они не будут удалены из кучи. Метод toString извлекает элементы непосредственно из кучи, не выполняя сортировку, что приводит к наблюдаемому результату.

Чтобы решить эту проблему и получить правильный порядок сортировки, необходимо извлечь элементы из PriorityQueue с помощью один. Метод poll() делает это, удаляя элемент из кучи и возвращая его. Выполнив итерацию PriorityQueue с помощью poll() и распечатав возвращенные элементы, вы можете получить отсортированный порядок, как предполагалось.

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

while (!queue.isEmpty()) {
   System.out.println(queue.poll());
}

Элементы будут напечатаны в порядке возрастания их частот, как определено компаратором.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3