java容器-堆和优先队列


今天介绍一些java内的容器-堆和优先队列,有些容器会在后续案例中更详细介绍

  • 是完全二叉树,给定任意一个节点,可以根据其编号直接快速计算出其父节点和孩子节点编号
  • 根据顺序分为两种堆:一种是最大堆,另一种是最小堆
  • 可以实现优先级队列,解决求前K个最大的元素,求中值元素等问题
  • 堆还可以实现排序,称之为堆排序
  • 概念上是树,存储为数组,父子有特殊顺序,根是最大值/最小值,构建/添加/删除效率都很高

优先队列

  • PriorityQueue
    • 内部是用堆实现的,内部元素不是完全有序的,逐个出队会得到有序的输出
    • 优先级可以有相同的,内部元素不是完全有序的,如果遍历输出,除了第一个,其他没有特定顺序
    • 查看头部元素的效率很高,为O(1),入队、出队效率比较高,为O(log2(N)),构建堆heapify的效率为O(N)

特别说明

  • 对于某些问题(如求前k个最大元素和求中值),相比使用排序,使用堆不仅实现效率更高,而且可以应对数据量不确定且源源不断到来的情况,可以给出实时结果

文章作者: Xudong Jiang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Xudong Jiang !
 上一篇
缓存数据一致性刷新方案 缓存数据一致性刷新方案
这里分享一下缓存和数据库数据一致性刷新的一些方案和实践。主要从一下4个方面进行介绍和分享。 数据一致性介绍 随着业务发展,数据需要添加副本以提高可行性; 为减少db访问压力,需要进行读写分离; 为提高接口响应时间,一般会将访问数据进行缓存;
2019-10-31
下一篇 
java容器-Map和Set java容器-Map和Set
今天介绍一些java内的容器-Map和Set,有些容器会在后续案例中更详细介绍 Map HashMap 实现map接口, key value键值对 内部实例变量size表示实际键值对的个数。table是一个Entry类型的数组,称为哈希表或
2019-10-15
  目录