Java:优先级队列

Avi*_*ddy 7 java collections priority-queue

我有一个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);

}
Run Code Online (Sandbox Code Playgroud)

}

我的问题是为什么优先级队列不对它们进行排序.根据java规范,它实现了可比较并维护排序顺序(自然排序)

我的节目输出如下:[1,2,3,4,5,9,7,10,6,8]

Fre*_*Foo 7

插入优先级队列不足以对元素列表进行排序,因为它不按排序顺序存储它们; 它将它们存储在部分排序的堆顺序中.您必须删除循环中的元素才能对它们进行排序:

while (pq.size() > 0)
    System.out.println(pq.remove());
Run Code Online (Sandbox Code Playgroud)


Kon*_*rus 7

它已排序,但内部元素存储在堆中.如果您打电话给peek(),poll()或者remove(),您将获得正确的订单(这就是您访问队列的方式).