PriorityQueue基于堆实现,默认为最小堆,头部为最小元素;可通过Comparator.reverseOrder()实现最大堆;支持自定义比较器对对象排序;常用方法包括offer()、poll()、peek()等;不支持null元素,遍历顺序无保证。

Java中的PriorityQueue是基于堆的数据结构,能自动根据元素的优先级排序。默认情况下,它实现最小堆,即队列头部是最小元素。你可以通过自定义比较器改变排序规则,实现最大堆或按特定条件排序。
1. 基本使用方法
PriorityQueue位于java.util包中,创建实例后可以直接添加、删除和查看元素。
示例:默认最小堆
代码:
PriorityQueue pq = new PriorityQueue();
pq.offer(5);
pq.offer(1);
pq.offer(3);
System.out.println(pq.poll()); // 输出 1
插入元素使用offer()或add(),取出头部元素用poll()。注意poll()在队列为空时返回null。
2. 实现最大堆
如果需要最大值优先,可以传入Comparator.reverseOrder()作为构造参数。
立即学习“Java免费学习笔记(深入)”;
PicDoc
AI文本转视觉工具,1秒生成可视化信息图
6214 查看详情
示例:最大堆
PriorityQueue maxPQ = new PriorityQueue(Comparator.reverseOrder());
maxPQ.offer(5);
maxPQ.offer(1);
maxPQ.offer(3);
System.out.println(maxPQ.poll()); // 输出 5
3. 自定义对象排序
当处理自定义类时,需实现Comparable接口或提供Comparator。
示例:按任务优先级排序
class Task {
int id;
int priority;
Task(int id, int priority) { this.id = id; this.priority = priority; }
}
PriorityQueue tasks = new PriorityQueue((a, b) -> b.priority – a.priority);
tasks.offer(new Task(1, 3));
tasks.offer(new Task(2, 1));
System.out.println(tasks.poll().id); // 输出 1(优先级最高)
这里使用Lambda表达式定义比较器,优先级数值大的排前面。
4. 常用方法说明
offer(E e):插入元素,失败时抛异常(通常不会失败)poll():移除并返回队首元素,队列空时返回nullpeek():查看队首元素但不移除size():返回队列大小isEmpty():判断是否为空
基本上就这些。使用PriorityQueue时注意它不支持null元素,且遍历时顺序不保证,只有每次poll()才是有序的。对于复杂排序逻辑,建议明确写出比较器以提高可读性。
以上就是如何在Java中使用PriorityQueue实现优先队列的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/995924.html
微信扫一扫
支付宝扫一扫