Java: приоритетная очередь - PullRequest
7 голосов
/ 28 октября 2011

У меня есть Java-программа, которая выглядит так

открытый класс PriorityQueueExample {

public static void main(String[] args) {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(10);
    pq.add(1);
    pq.add(9);
    pq.add(2);
    pq.add(8);
    pq.add(3);
    pq.add(7);
    pq.add(4);
    pq.add(6);
    pq.add(5);
System.out.println(pq);

}

}

Мой вопрос: почему очередь приоритетов не сортирует их? Согласно спецификациям java он реализует сравнимый и поддерживает порядок сортировки (естественная сортировка)

Мой вывод программы следующий: [1, 2, 3, 4, 5, 9, 7, 10, 6, 8]

Ответы [ 2 ]

7 голосов
/ 28 октября 2011

Сортируется, но внутренне элементы хранятся в куче . Если вы позвоните peek(), poll() или remove(), вы получите правильный порядок (и именно так вы получите доступ к очередям).

7 голосов
/ 28 октября 2011

Вставка в приоритетную очередь недостаточна для сортировки списка элементов, поскольку она не сохраняет их в отсортированном порядке;он сохраняет их в частично отсортированном порядке heap .Вы должны удалить элементы в цикле, чтобы отсортировать их:

while (pq.size() > 0)
    System.out.println(pq.remove());
...