优先级队列不维护排序顺序 我是否没有正确实现Comparable? 输出的排序顺序错误?
import java.util.PriorityQueue;
class A implements Comparable
{
int i;
A(int i)
{
this.i = i;
}
public int compareTo(Object obj)
{
return i - ((A)obj).i;
}
public String toString()
{
return Integer.toString(i);
}
}
class Manager11
{
public static void main(String[] args)
{
PriorityQueue pq = new PriorityQueue();
pq.add(new A(9));
pq.add(new A(5));
pq.add(new A(8));
pq.add(new A(19));
pq.add(new A(1));
System.out.println(pq);
}
}
输出: [1,5,8,19,9]
最佳答案
在优先级队列中,唯一的保证是头是最低的(或最大的,取决于你的比较)。内部结构不一定是排序列表。实际上,在 Java 中,它是一个堆:
PriorityQueue
An unbounded priority queue based on a priority heap.
但是,如果您执行一个循环来 poll()
第一项,然后一次又一次地打印它,直到优先级队列为空。应从最低到最大元素打印元素。
关于java - 优先级队列不维护排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787067/