可能重复:
Why is this strange order happens in PriorityQueue in java?
请参阅以下代码:
public static void main(String[] args) {
Queue<String> q = new PriorityQueue<String>();
q.offer("car");
q.offer("airplane");
q.offer("bicycle");
Iterator<String> i = q.iterator();
while(i.hasNext())
System.out.print(i.next() + " ");
}
有人可以解释为什么输出
airplane car bicycle
而不是
airplane bicycle car
因为in the API它表示优先级队列的元素是按照它们的自然顺序排序的。
答案 0 :(得分:8)
迭代器不会以任何特定顺序返回元素。
但是,第一项(头部)保证是最小的。所以这应该打印出你期望的东西:
public static void main(String[] args) throws Exception {
Queue<String> q = new PriorityQueue<String>();
q.offer("car");
q.offer("airplane");
q.offer("bicycle");
String e = null;
while ((e = q.poll()) != null) {
System.out.println(e);
}
}
如果要对迭代进行排序,则需要使用其他结构,例如TreeSet
如果没有重复项。
答案 1 :(得分:1)
PriorityQueue基于优先级堆。尽管元素未排序,但此数据结构允许非常快速地检索最少元素。向PriorityQueue添加元素比基于树的TreeSet更快。由于元素没有排序,因此API所说的迭代器“不会以任何特定的顺序返回元素”。