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

Java中的PriorityQueue是基于堆的数据结构,能自动根据元素的优先级排序。默认情况下,它实现最小堆,即队列头部是最小元素。你可以通过自定义比较器改变排序规则,实现最大堆或按特定条件排序。
PriorityQueue位于java.util包中,创建实例后可以直接添加、删除和查看元素。
代码:
PriorityQueue
pq.offer(5);
pq.offer(1);
pq.offer(3);
System.out.println(pq.poll()); // 输出 1
插入元素使用offer()或add(),取出头部元素用poll()。注意poll()在队列为空时返回null。
如果需要最大值优先,可以传入Comparator.reverseOrder()作为构造参数。
立即学习“Java免费学习笔记(深入)”;
示例:最大堆
PriorityQueue
maxPQ.offer(5);
maxPQ.offer(1);
maxPQ.offer(3);
System.out.println(maxPQ.poll()); // 输出 5
当处理自定义类时,需实现Comparable接口或提供Comparator。
class Task {
int id;
int priority;
Task(int id, int priority) { this.id = id; this.priority = priority; }
}
PriorityQueue
tasks.offer(new Task(1, 3));
tasks.offer(new Task(2, 1));
System.out.println(tasks.poll().id); // 输出 1(优先级最高)
这里使用Lambda表达式定义比较器,优先级数值大的排前面。
offer(E e):插入元素,失败时抛异常(通常不会失败)poll():移除并返回队首元素,队列空时返回null
peek():查看队首元素但不移除size():返回队列大小isEmpty():判断是否为空基本上就这些。使用PriorityQueue时注意它不支持null元素,且遍历时顺序不保证,只有每次poll()才是有序的。对于复杂排序逻辑,建议明确写出比较器以提高可读性。
以上就是如何在Java中使用PriorityQueue实现优先队列的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号