这是我的代码
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);
}
}
结果
我不知道为什么队列成为优先级后 {1,2,5,4,3,9,6,10,7,8}
答案 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())。
因此,如果您从队列中一次检索到这些项目,则打印队列不会按照您获取它们的顺序打印项目。