java - 优先队列未保持排序顺序
问题描述
优先级队列没有保持排序顺序 我是否没有正确实施 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 中,它是一个堆:
优先队列
基于优先级堆的无界优先级队列。
但是,如果您poll()
对第一项进行循环,则一次又一次地打印它,直到优先级队列为空。元素应该从最小到最大的元素打印。
推荐阅读
- c++ - 访问基类的受保护成员时相同的层次结构,不同的行为
- typescript - 如何创建 GoogleAppsScript.Document.Text 的实例
- amazon-web-services - 从 API 网关返回的随机字符串?
- javascript - 当条件不满足时函数需要停止执行但它仍然执行
- javascript - 如何将任何图像转换为 webp?
- .htaccess - 使用 htaccess 在域名之后删除 //
- mysql - 如何在 mysql 中使用 group by 和 count 函数创建 JSON 格式?
- c# - 编译后有没有办法从项目内部获取文件文本/代码
- sql - 通过传递 XML 的动态节点名获取值
- java - docker java编译并运行mysql驱动程序不起作用