PriorityQueue是Java中基于优先堆的无界队列,默认按自然升序排列,可通过Comparator自定义排序,常用于贪心算法、Dijkstra等场景;其常用方法包括offer()入队、poll()出队并移除队首、peek()查看队首、size()和isEmpty(),注意它非线程安全、不支持null元素,且迭代顺序无序,仅通过poll可按优先级获取元素。

在Java中,PriorityQueue 是一个基于优先堆的无界队列,它能自动根据元素的优先级进行排序。默认情况下,元素按自然升序排列(最小值优先),也可以通过自定义 Comparator 改变排序规则。它常用于实现贪心算法、Dijkstra 算法、合并K个有序链表等场景。
1. 基本使用方法
PriorityQueue 位于 java.util 包中,使用前需要导入。创建一个默认的 PriorityQueue 后,插入元素会自动排序。
PriorityQueuewhile (!pq.isEmpty()) { System.out.println(pq.poll()); // 输出:1, 3, 5 }
注意:poll() 方法取出并移除队首元素(优先级最高),peek() 只查看不移除。
2. 自定义排序规则
如果想让优先级最高的元素是最大值(降序),可以传入 Collections.reverseOrder()。或者实现自己的 Comparator。
立即学习“Java免费学习笔记(深入)”;
// 最大值优先 PriorityQueueSystem.out.println(maxPQ.poll()); // 输出:8
对于自定义对象,比如按学生分数排序:
Shopxp购物系统历经多年的考验,并在推出shopxp免费购物系统下载之后,收到用户反馈的各种安全、漏洞、BUG、使用问题进行多次修补,已经从成熟迈向经典,再好的系统也会有问题,在完善的系统也从在安全漏洞,该系统完全开源可编辑,当您下载这套商城系统之后,可以结合自身的技术情况,进行开发完善,当然您如果有更好的建议可从官方网站提交给我们。Shopxp网上购物系统完整可用,无任何收费项目。该系统经过
PriorityQueue
3. 常用方法说明
- offer(E e):添加元素,失败时抛异常(队列满时不会发生,因为无界)
- poll():取出并删除队首元素,队列为空返回 null
- peek():查看队首元素,不删除
- size():返回当前元素数量
- isEmpty():判断是否为空
4. 注意事项
PriorityQueue 不是线程安全的。如果需要在多线程环境中使用,应考虑 PriorityBlockingQueue。
不能插入 null 元素,否则会抛出 NullPointerException。
迭代遍历时顺序不一定有序,只有不断 poll 才能按优先级顺序获取元素。
基本上就这些。掌握 offer、poll、peek 和自定义 Comparator 就能满足大多数需求。









