根据PriorityQueue的定义,它说:
优先级队列的元素按照它们的顺序排序 自然排序,或由队列建设时提供的比较器 时间,取决于使用的构造函数。
但是当我尝试在队列中使用3个元素时,元素似乎没有正确排序。
Queue<Integer> q2 = new PriorityQueue<Integer>();
q2.add(9);
q2.add(7);
q2.add(8);
Iterator<Integer> i = q2.iterator();
while(i.hasNext()){
Integer e = i.next();
System.out.println(e);
}
输出:
7
9
8
[编辑] 如果元素的数量是4,则排序看起来是正确的
q2.add(9);
q2.add(7);
q2.add(8);
q2.add(5);
Iterator<Integer> i = q2.iterator();
while(i.hasNext()){
Integer e = i.next();
System.out.println(e);
}
输出:
5
7
8
9
答案 0 :(得分:-1)
问题是您使用的Iterator
在队列遍历期间不保证任何顺序。 PriorityQueue
的Javadoc说:
方法
iterator()
中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果您需要有序遍历,请考虑使用Arrays.sort(pq.toArray()
)。
轮询队列时,您将获得正确的顺序:
while (!q2.isEmpty()) {
System.out.println(q2.poll());
}