Java优先级队列行为,队列中有3个元素
根据PriorityQueue的定义,它表示: 优先级队列的元素根据其优先级排序 自然排序,或由队列构造时提供的比较器进行排序 时间,取决于使用的构造函数 但是当我尝试处理队列中的3个元素时,这些元素似乎没有正确排序Java优先级队列行为,队列中有3个元素,java,priority-queue,Java,Priority Queue,根据PriorityQueue的定义,它表示: 优先级队列的元素根据其优先级排序 自然排序,或由队列构造时提供的比较器进行排序 时间,取决于使用的构造函数 但是当我尝试处理队列中的3个元素时,这些元素似乎没有正确排序 Queue<Integer> q2 = new PriorityQueue<Integer>(); q2.add(9); q2.add(7); q2.add(8); Iterator<Integer> i
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);
}
[编辑]
如果元素数为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);
}
问题是您使用的是
迭代器
,它不能保证队列遍历期间的任何顺序。PriorityQueue
的Javadoc说:
方法Iterator()
中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用<代码>数组。排序(pq.toRayay.)(<代码>)。
轮询队列时,您将获得正确的顺序:
while (!q2.isEmpty()) {
System.out.println(q2.poll());
}
问题是您使用的是
迭代器
,它不能保证队列遍历期间的任何顺序。PriorityQueue
的Javadoc说:
方法Iterator()
中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用<代码>数组。排序(pq.toRayay.)(<代码>)。
轮询队列时,您将获得正确的顺序:
while (!q2.isEmpty()) {
System.out.println(q2.poll());
}
为什么要投否决票?这个答案有问题吗?为什么投反对票?这个答案有问题吗?
while (!q2.isEmpty()) {
System.out.println(q2.poll());
}