没有合适的资源?快使用搜索试试~ 我知道了~
总体介绍 前面以Java ArrayDeque为例讲解了Stack和Queue,其实还有一种特殊的队列叫做PriorityQueue,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值小的(Java的优先队列每次取小元素,C++的优先队列每次取大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)。 Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete bin
资源推荐
资源详情
资源评论
格式:pdf 资源大小:101.0KB 页数:3

Java集合框架源码剖析:集合框架源码剖析:PriorityQueue
总体介绍
前面以Java ArrayDeque为例讲解了Stack和Queue,其实还有一种特殊的队列叫做PriorityQueue,即优先队列。优先队
列的作用是能保证每次取出的元素都是队列中权值小的(Java的优先队列每次取小元素,C++的优先队列每次取大元素)。这
里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器
(Comparator,类似于C++的仿函数)。
Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete
binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也意味着可以通过数组来作为
PriorityQueue的底层实现。
上图中我们给每个元素按照层序遍历的方式进行了编号,如果你足够细心,会发现父节点和子节点的编号是有联系的,更
确切的说父子节点的编号之间有如下关系:
leftNo = parentNo*2+1
rightNo = parentNo*2+2
parentNo = (nodeNo-1)/2
通过上述三个公式,可以轻易计算出某个节点的父节点以及子节点的下标。这也是为什么可以直接用数组来存储堆的原
因。
PriorityQueue的peek()和element操作是常数时间,add(), offer(), 无参数的remove()以及poll()方法的时间复杂度都是
log(N)。
方法剖析
add()和offer()
add(E e)和offer(E e)的语义相同,都是向优先队列中插入元素,只是Queue接口规定二者对插入失败时的处理不同,前
者在插入失败时抛出异常,后则则会返回false。对于PriorityQueue这两个方法其实没什么差别。
资源评论
weixin_38681736
- 粉丝: 3
上传资源 快速赚钱
我的内容管理
展开
我的资源
快来上传第一个资源
我的收益 登录查看自己的收益
我的积分
登录查看自己的积分
我的C币
登录后查看C币余额
我的收藏
我的下载
下载帮助
前往需求广场,查看用户热搜最新资源
- CnSTD-Python资源
- 理论密码学前沿研究
- 面向安全的计算科学前沿
- 用于计算方差敏感索波尔指数方法,这是一种流行的特征选择和降维算法(Matlab代码实现)
- 语音信号处理中低频特征分析综述
- 自主机器人导论
- 在车联网通信网络V2X中使用机器学习检测基本干扰攻击研究(Matlab代码实现)
- 计算系统生物学前沿
- 一种适应性CM阵列预处理器用于盲多用户分离(Matlab代码实现)
- 安全与隐私技术前沿
- BaseFramework-TC27D-OS-OIL-Demo1
- 使用卡尔曼融合GPS数据和加速度数据,一方面提升定位输出速率,一方面可以再GPS信号不好时通过IMU惯导辅助纠正路线,加速度数据已经转为惯导坐标系下,并做了滤波矫正处理(Matlab代码实现)
- 计算科学前沿:自适应模型
- 【9种优化算法比较】CGO、SCA、GWO、CSA、SSA、HHO、WOA、PSO、TSO智能优化算法比较(Matlab代码实现)
- 解决Android自定义Linear Bundle布局显示不全问题的方法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功