——实现模拟的大小顶堆(优先队列与TreeMap)

以Java中可自排序的数据结构,实现加入元素后,'堆顶'保持最大/最小

  • 优先队列

​ PriorityQueue是优先队列,作用是保证每次取出的元素都是队列中权值最小的,这里涉及到了大小关系,元素大小的评判可以通过元素自身的自然顺序(使用默认的比较器),也可以通过构造时传入的比较器。

PriorityQueue temp=new PriorityQueue<Long>((a, b)->(a-b))
PriorityQueue temp=new PriorityQueue<Long>((a, b)->(b-a))
//上述分别实现大小顶堆
temp.offer();
temp.poll();
temp.peek(); 分别为加入、推出、取堆顶元素
  • TreeMap
  1. TreeMap存储K-V键值对,通过红黑树(R-B tree)实现;该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
  2. TreeMap继承了NavigableMap接口,NavigableMap接口继承了SortedMap接口,可支持一系列的导航定位以及导航操作的方法,当然只是提供了接口,需要TreeMap自己去实现;
  3. TreeMap实现了Cloneable接口,可被克隆,实现了Serializable接口,可序列化。
  4. TreeMap因为是通过红黑树实现,红黑树结构天然支持排序,默认情况下通过Key值的自然顺序进行排序;
  5. TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n)。
public static void main(String[] args) {TreeMap<Integer, String> treeMap1 = new TreeMap<Integer,String>((a, b) -> (a - b));  //小顶堆TreeMap<Integer, String> treeMap = new TreeMap<Integer,String>((a, b) -> (b - a));  //大顶堆treeMap.put(1, "1");treeMap.put(3, "2");  // 注意这里!!!treeMap.put(2, "3");treeMap.put(4, "4");treeMap.put(5, "5");treeMap.put(6, "6");treeMap.put(7, "7");treeMap.forEach((k, v) -> {System.out.println(v);});}/***********************打印结果*********************************
7
6
5
4
2
3
1
************************************************************/

Java创建大小顶堆相关推荐

  1. java实现小顶堆 在指定数据中找出前n大的数

    小顶堆: 我们利用的特性:每个节点都比左右孩子小 图示: 取数组前n个数,构成小顶堆 然后从数组里面获取数据,如果比堆顶小,直接抛弃,如果比堆顶大,就替换堆顶,并调整堆,使堆始终满足小顶堆的特性 93 ...

  2. Java版大顶堆的实现

    堆的概念 堆是一棵完全二叉树,一般使用数组来存储.通俗来讲堆其实就是利用数组来维护一个完全二叉树. 按照堆的特点可以把堆分为大顶堆和小顶堆 大顶堆:堆的每个结点的值都大于或等于其左右孩子结点的值 小顶 ...

  3. java大顶堆小顶堆使用案例

    使用优先级队列实现大小顶堆 例题: class MedianFinder {PriorityQueue<Integer> left; //创建大顶堆PriorityQueue<Int ...

  4. java大顶堆类,构建大顶堆、堆排序实现(java)

    构建大顶堆.堆排序实现(java) 构建大顶堆.堆排序实现(java) 堆排序介绍: ①堆排序是利用堆的数据结构设计的一种排序算法,堆排序是一种选择排序,时间复杂度为O(nlogn),是不稳定排序: ...

  5. 用Java实现二叉堆、大顶堆和小顶堆

    先了解了解 什么是二叉堆 二叉堆就是完全二叉树,或者是靠近完全二叉树结构的二叉树.在二叉树建树时采取前序建树就是建立的完全二叉树.也就是二叉堆.所以二叉堆的建堆过程理论上讲和前序建树一样. 什么是大顶 ...

  6. 剑指Offer之寻找数据流中的中位数【包含大顶堆小顶堆解释】

    数据流中的中位数 题目描述 题解 最小堆和最大堆解释 参考链接 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶 ...

  7. (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)

    目录 LeetCode150. 逆波兰表达式求值 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode239. 滑动窗口最大值 1. 思路 2. 代码实现 3. 复杂度分析 4. ...

  8. c语言实现大顶堆思路及代码

    一.什么是大顶堆 堆是树的一种特殊形式,特点如下: 1.一定是一颗完全二叉树: 2.堆本身以及其子树根节点一定是最大(大顶堆),或者最小(小顶堆): 二.思路 创建大顶堆,我们需要创建以下东西 结点: ...

  9. 数据结构之堆——C++实现大顶堆和小顶堆

    大小顶堆的实现 什么是大顶堆和小顶堆 大小顶堆的底层实现 代码实现小顶堆 定义小顶堆类 构造函数 插入 扩大堆数组容量 删除 析构函数 代码实现大顶堆 测试 什么是大顶堆和小顶堆 堆是一种完全二叉树. ...

最新文章

  1. Find the AFei Numbers
  2. uml 类图聚合与组合
  3. rust火箭基地主楼开启方法_Rust 为什么能成为 Stack Overflow 最受欢迎的语言?
  4. linux修改栈指针x86,x86-堆栈指针未填充16时libc的system()导致分段...
  5. 暑期训练日志----2018.8.6
  6. master分支 合并到main_10 月 1 日后,GitHub 默认分支不再叫master!
  7. C 语言 结构类型 结构
  8. Mysql Error:1205错误诊断
  9. ASP.NET_各个币种之间的汇率转换(实时)使用Yahoo汇率。
  10. Javascript中大于和小于
  11. 新手安装Ubuntu 16.04 操作系统
  12. 【JZOJ B组】【NOI2002】贪吃的九头龙
  13. 全新版windows terminal 更换背景
  14. [JavaScript学习记录] 首次运用于网页,做一个简易利息计算器!!!
  15. VIVADO学习笔记之--拥塞
  16. 掌上微博android源代码,掌上微博 全能手机
  17. 带着问题读源码-soul(2021-01-14)
  18. 塔菲尔曲线斜率的大小_如何从曲线上确定Tafel斜率?
  19. 【实验】Oracle 10g RAC生产数据库RMAN方式恢复到异地单机数据库全程记录
  20. 基于树莓派(ARM)的人脸识别摄像头(QT5.8+OPENCV3.4.5)开发总结

热门文章

  1. MOF-74(Co)金属有机骨架,CAS: 871658-67-2的单位分子量
  2. 高等数学:第一章 函数与极限(4)无穷小与无穷大
  3. 移动端视网膜(Retina)屏幕下1px边框线的解决方法
  4. mysql 索引碎片查询_Sqlserver:索引碎片的查询
  5. 压缩包解压密码找回密码
  6. 隔离放大器 模块DIN导轨安装低成本小体积
  7. 软件企业需求的人才(开发人员与软件开发工程师综合对比篇)
  8. XV6实验(2020)
  9. vue整合富文本编辑器tinymce
  10. php验证邮编,php 电话号码 手机号码 邮编 电子邮件 验证