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

数据结构—优先级队列(堆)

一.优先级队列的存储

优先级队列存储在一堆数组中,分为大堆和小堆,把二叉树按层序遍历得出的结果存储到优先级队列

二.堆的分类

堆是一颗完全二叉树,堆分为大根堆和小根堆,大根堆根结点比左右孩子结点都大,小根堆相反

三.性质

设i是数组下标

1.i = 0,是根结点

2.结点的双亲结点是(i - 1 )/ 2

3.(2 * i + 1)是左孩子结点,(2 * i + 2)是右孩子结点

四.代码实现

1.创建

此时默认建立的是小根堆,那么我们如何建立大根堆呢

我们需要重写比较器

但是这种方法不方便更改,那么我们可以用下面的方法

我们可以构建一个比较器生成大根堆

它的好处是如果需要生成小根堆,我们可以重新构建一个比较器将里面的参数换成这个比较器就可以了

2.功能

五.关于PriorityQueue使用时的注意事项:

1.PriorityQueue中放置的元素必须要能够⽐较⼤⼩,不能插⼊⽆法⽐较⼤⼩的对象,否则会抛出 ClassCastException异常

2. 不能插⼊null对象,否则会抛出NullPointerException

3. 没有容量限制,可以插⼊任意多个元素,其内部可以⾃动扩容

4. 插⼊和删除元素的时间复杂度为

5. PriorityQueue底层使⽤了堆数据结构

6. PriorityQueue默认情况下是⼩堆---即每次获取到的元素都是最⼩的元素

7.当调用grow(扩容)时,如果>64,1.5倍扩容,<64,2倍扩容

http://www.cnnetsun.cn/news/168386.html

相关文章:

  • Linly-Talker能否导出音频单独使用?资源复用建议
  • Linly-Talker如何保证用户上传肖像的安全性?
  • Linly-Talker如何处理专业术语发音准确性问题?
  • Linly-Talker如何平衡生成速度与画质清晰度?
  • 基于springboot+vue3的企业人事管理系统设计与实现
  • Linly-Talker支持实时摄像头推流吗?直播推流配置指南
  • Java之网络编程,新书小白入门教学,收藏这篇就够了
  • Linly-Talker能否识别方言输入?ASR模块能力测试
  • Linly-Talker在短视频平台的内容生产提效实证
  • +高校线上心理咨询室设计与实现pf信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • SpringBoot+Vue +疫情物资捐赠和分配系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 企业级+高校线上心理咨询室设计与实现pf管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 免费在线网盘解析:夸克文件高速下载
  • Git原理与使用
  • 神经网络如何学习:一种概率视角
  • 亲测10款降ai率工具:AI率80%怎么一键降低ai?(2025最新降AIGC避坑指南)
  • PySpark实战 - 2.1 利用Spark SQL实现词频统计
  • PerlinNoise Perlin噪声(PerlinNoise)隐式函数构建模型并渲染
  • Linly-Talker支持模型性能 profiling,精准定位瓶颈
  • Linly-Talker如何处理中英文混读?语音识别适配策略
  • LLM 的思考方式
  • 【虚拟同步机控制建模】三相虚拟同步发电机双环控制(Simulink仿真实现)
  • 万字长文!关于AI绘图,一篇超详细的总结发布
  • 数字人会议主持:Linly-Talker在远程会议中的创新应用
  • 【顶级EI完整复现】【DRCC】考虑N-1准则的分布鲁棒机会约束低碳经济调度(Matlab代码实现)
  • 用Linly-Talker做企业宣传片?品牌传播的AI新路径
  • Electerm(桌面终端模拟软件)
  • Thinkphp和Laravel基于Vue的黄山旅游景区门票预订网站的设计与实现_3h38caai
  • Thinkphp和Laravel基于大数据架构的大学生求职招聘就业岗位推荐系统的设计与实现_67911t4j
  • AI工具实战测评技术