当前位置: 首页 > news >正文

Java中的优先队列PriorityQueue

PriorityQueue 是 Java 里的 “优先队列”——
本质上是一个 二叉堆(binary heap),默认 小根堆(堆顶最小)。
不是普通 FIFO 队列,而是 每次取出的都是“优先级最高”的元素


1 基本定位

接口/类说明
实现接口Queue, Collection, Iterable
底层结构对象数组 实现的 可扩容二叉堆(完全二叉树)
是否线程安全❌ 非同步;需要并发请用 PriorityBlockingQueue
允许 null❌ 插入 null 抛 NullPointerException
是否有序整体 无序;只有 堆顶 是最小(或最大)

2 默认小根堆

PriorityQueue<Integer> q = new PriorityQueue<>();
q.add(5);
q.add(1);
q.add(3);
System.out.println(q.poll()); // 1
System.out.println(q.poll()); // 3
System.out.println(q.poll()); // 5

每次 poll() 都会拿出 当前最小值


3 自定义排序:改成“大根堆”

// 方法 1:传入 Comparator
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);// 方法 2:使用 Comparator.reverseOrder()
PriorityQueue<Integer> maxHeap2 = new PriorityQueue<>(Comparator.reverseOrder());

4 核心 API

方法功能失败时行为
boolean offer(E e)入堆返回 false / 抛异常(视容量策略)
E peek()看堆顶空返回 null
E poll()弹出堆顶空返回 null
boolean remove(Object o)删除指定元素成功 true,否则 false
int size()当前元素个数
clear() / contains()同 Collection

5 存储结构:数组表示完全二叉树

对于下标 i(从 0 开始)

  • 父节点索引: (i - 1) / 2
  • 左孩索引: 2*i + 1
  • 右孩索引: 2*i + 2

堆化向上(siftUp)与向下(siftDown)时间复杂度 O(log n)


6 初始容量与扩容

  • 默认初始容量 11
  • 扩容策略:旧容量 < 642 倍 + 2;否则 1.5 倍
  • 可显式指定容量 new PriorityQueue<>(initialCapacity)

7 元素必须可比较

元素要么

  1. 实现 Comparable<T>(自然顺序),
  2. 或在构造时提供 Comparator<? super E>

否则运行期抛 ClassCastException


8 与 TreeSet 的异同

特性PriorityQueueTreeSet
底层二叉堆红黑树
整体有序❌ 只有堆顶最值✅ 完全有序
时间复杂度offer/poll O(log n)add/remove O(log n)
重复元素✅ 允许❌ 不允许

9 常见用途

  • Top-K 问题(用容量固定为 K 的大/小根堆)
  • 合并 K 个有序链表/数组
  • Dijkstra、Prim 等图算法需要“当前最小边/节点”
  • 定时任务调度(DelayQueue 内部也用优先队列)

10 小结一句话
PriorityQueue = 可动态增删的“堆”结构,永远把“优先级最高”的元素放在队首,默认小根堆,自定义 Comparator 可变大根堆,操作复杂度 O(log n)。

http://www.dtcms.com/a/435586.html

相关文章:

  • 宁波网站关键词做网站赚钱还是做应用赚钱
  • 重庆网站推广营销h5页面制作工具 软件
  • AI让产品越来越用户中心化
  • 襄阳做淘宝网站推广建设银行个人登录网站
  • 网站建设思维1级a做爰免费网站
  • 网站设计报告总结淘客免费网站建设
  • 又一个 wordpress 站点php网站建设填空题
  • 那个网站做图片好看wordpress 导入数据库结构
  • Bean后处理器
  • 一款可视化的自动复盘系统分享
  • 郑州正云网站建设慈溪网站建设慈溪
  • 我爱学算法之—— 分治-快排
  • asp网站后台上传不了图片wordpress无法加载图片
  • 什么软件 做短视频网站长尾关键词有哪些
  • 江苏建设部官方网站外贸网站有必要吗
  • 企业网站规划案例长沙seo全网营销
  • 郑州营销网站公司地址天台县建设局官方网站
  • 函数调用约定
  • 迪杰斯特拉算法
  • 网站租用服务器价格个人主页网页设计模板
  • 【开题答辩实录分享】以《基于协调过滤算法的插画分享与社交网络平台的设计与实现》为例进行答辩实录分享
  • c语言定义数组
  • 网站运营问题wordpress主题报错
  • 做个网站需要多少钱?有没有旧装修要拆wordpress ck
  • 安卓基础组件024-fagment
  • Python 列表操作速查:增删改查与切片技巧
  • 泰州网站制作工具手机访问自动跳转到wap网站的代码
  • 家居企业网站建设讯息产品介绍彩页模板
  • Spring 基础核心 - SpringMVC 入门与请求流程
  • 【小沐学GIS】基于C++瓦片地图下载工具(高德/天地图/谷歌/必应/OSM/MapBox/ArcGIS)第十三期