2011-10-28 90 views
7

我有一个Java程序,它是这样的的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 ]

回答

7

插入优先级队列不足以对元素列表进行排序,因为它不会按排序顺序存储它们;它将它们存储在部分排序的堆订单中。你必须删除在一个循环中的元素对它们进行排序:

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

将垃圾分类,但内部的元素存储在一个。如果您拨打peek()poll()remove(),您将得到正确的顺序(这就是您访问队列的方式)。