如何理解PriorityQueue?

时间:2016-01-16 05:45:59

标签: java

这是我的代码

 import java.util.*;
    public class PriorityPuzzle{
        public static void main(String []args){
            PriorityQueue<Integer> prq = new PriorityQueue<Integer>();  
            for ( int i = 10; i > 0; i-- ){  
                  prq.add (i); 
                  System.out.print(i+" , ");
            }  

            System.out.println ( "\n Initial priority queue values are: "+ prq);    
        }  
    }

结果

enter image description here

我不知道为什么队列成为优先级后 {1,2,5,4,3,9,6,10,7,8}

2 个答案:

答案 0 :(得分:3)

文档说这个优先级队列基于优先级堆。文档也没有提到toString()被这个类重写。 PriorityQueue实际上使用AbstractCollection中的toString方法。

我猜是因为toString()没有按顺序打印元素,它只是使用一些依赖于堆的任意内部顺序。如果您想按顺序打印元素,则必须使用Iterator或类似内容并自行打印。

答案 1 :(得分:3)

toString() method for PriorityQueue只是继承the one from AbstractCollection。这只是迭代集合中的项目并打印出来。

来自文档for the iterator of PriorityQueue

  

方法iterator()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用Arrays.sort(pq.toArray())。

因此,如果您从队列中一次检索到这些项目,则打印队列不会按照您获取它们的顺序打印项目。