Java创建大小顶堆

——实现模拟的大小顶堆(优先队列与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
************************************************************/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

strcpy函数的实现

大家一般觉得名不见经传strcpy函数实现不是非常难&#xff0c;流行的strcpy函数写法是&#xff1a; char *my_strcpy(char *dst,const char *src) {assert(dst ! NULL);assert(src ! NULL);char *ret dst;while((* dst * src) ! \0) ;return ret; }假设注意到&#xff1a; 1&…

Maven 3-Maven依赖版本冲突的分析及解决小结

摘自&#xff1a; https://www.cnblogs.com/aspirant/p/8532962.html 举例A依赖于B及C&#xff0c;而B又依赖于X、Y&#xff0c;而C依赖于X、M&#xff0c;则A除引B及C的依赖包下&#xff0c;还会引入X&#xff0c;Y&#xff0c;M的依赖包&#xff08;一般情况下了&#xff0c;…

阮一峰:jQuery官方基础教程笔记

原文地址&#xff1a;http://www.jobbole.com/entry.php/1151 jQuery是目前使用最广泛的javascript函数库。  据统计&#xff0c;全世界排名前100万的网站&#xff0c;有46%使用jQuery&#xff0c;远远超过其他库。微软公司甚至把jQuery作为他们的官方库。  对于网页开发者…

LeetCode—297. 二叉树的序列化与反序列化(困难)

297. 二叉树的序列化与反序列化&#xff08;困难&#xff09; 题目描述&#xff1a; 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#xff0c;进而可以将转换后的数据存储在一个文件或者内存中&#xff0c;同时也可以通过网络传输到另一个计算机环境&#xff0c;…

MIME类型不可小视

在完成一个在线播放模块的时候,遇到麻烦,使用一个空页面,采用流方式读取媒体文件,然后将此页面作为文件名赋给网页播放器的FileName属性.结果是常用流媒体格式的文件播放正常,类似于ram,avi,asf这些格式的文件不能播放,报出来的错误也是说文件不可识别.查看详细信息只给出一个标…

一个简单粗暴的前后端分离方案

项目背景 刚刚参加完一个项目&#xff0c;背景&#xff1a;后端是用java&#xff0c;后端服务已经开发的差不多了&#xff0c;现在要通过web的方式对外提供服务&#xff0c;也就是B/S架构。后端专注做业务逻辑&#xff0c;不想在后端做页面渲染的事情&#xff0c;只向前端提供数…

Jena Fuseki安装完成后不能添加数据库

问题描述&#xff1a;安装Jena成功后可以进入管理页面&#xff0c;无法通过界面选择和查询数据 解决方案&#xff1a; 进入 apache-jena-fuseki-3.12.0\run 修改 shiro.ini 配置文件 注释 /$/** localhostFilter&#xff0c;然后重启 转载于:https://www.cnblogs.com/bincodin…

python的setup()与py2exe

自己从事的工作涉及到Python&#xff0c;而之前从来没用过&#xff0c;只好从头学&#xff0c;其实看Python的代码还挺容易看懂的&#xff0c;只是要自己写就很难。 下面是看源码时遇到的一段代码&#xff1a; from distutils.core import setupimport py2exesetup(console[Pyt…

LeetCode—54. 螺旋矩阵

54. 螺旋矩阵 题目描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 考察重点&#xff1a;使用全局变量way数组&#xff0c;配合变量n记录走的方向&#xff1b;nowX&#xff0c;nowY记录当前位置&am…

iBATIS.NET 学习笔记(八)

在iBATIS.NET 学习笔记(五)中的DataGrid中加入删除功能&#xff0c;删除客户信息。修改Maps/Customers.xml,在statements标记中加入下面代码&#xff1a;<delete id"DeleteCustomer"parameterClass"string">delete from Customers where CustomerID#…

PowerShell实现批量收集SCVMM中虚拟机IP-续

因为本人技术提升了&#xff0c;所以这个脚本又改进了&#xff0c;得益于同事给我悉心教导c#语法&#xff0c;这个脚本更好用了。废话不多说&#xff0c;直接上代码。#powerd by 九叔 #批量从VMM和Hyper-V中获取IP地址&#xff0c;方便比对。更准确。 #转载必须注明出处&#x…

C/S框架-WebService架构用户凭证(令牌)解决方案

C/S框架-WebService架构用户凭证(令牌)解决方案 http://www.csframework.com/archive/5/arc-5-20110520-1504.htm C/S框架高级版引用WebService技术&#xff0c;WebService架构的应用系统不可忽视其安全性&#xff0c;WebServcie页面(*.asmx)提供了一组接口(WebMethod,Web方法)…

树形动规_(技能树)

技能树(SGOI) skill.pas/c/cpp 【问题描述】 玩过 Diablo 的人对技能树一定是很熟悉的。一颗技能树的每个结点都是一项技能&#xff0c;要学会这项技能则需要耗费一定的技能点数。只有在学会了某一项技能以后&#xff0c;才能继续学习它的后继技能。每项技能又有着不同的级别&a…

LeetCode—299. 猜数字游戏

299. 猜数字游戏 题目描述&#xff1a; 你在和朋友一起玩 猜数字&#xff08;Bulls and Cows&#xff09;游戏&#xff0c;该游戏规则如下&#xff1a; 写出一个秘密数字&#xff0c;并请朋友猜这个数字是多少。朋友每猜测一次&#xff0c;你就会给他一个包含下述信息的提示&…

有关集中用户的问题

集中用户应该有一个“所属管理插件”的字段&#xff0c;记录此用户的出处&#xff0c;比如“内部员工”&#xff0c;即由“内部控制台”插件管理。 那么用户 staff_tommy 的“所属管理插件”的字段值为“InternelWebControlPanel”. 系统内核插件提供一个扩展点为“UserPro…

html5 学习笔记三(web存储)

HTML5 提供了两种在客户端存储数据的新方法&#xff1a; localStorage - 没有时间限制的数据存储sessionStorage - 针对一个 session 的数据存储之前&#xff0c;这些都是由 cookie 完成的。但是 cookie 不适合大量数据的存储&#xff0c;因为它们由每个对服务器的请求来传递&a…

mobile web retina 下 1px 边框解决方案

http://www.tuicool.com/articles/ZRv6bun 再谈mobile web retina 下 1px 边框解决方案 时间 2015-01-03 12:03:31 Hugo Web前端开发原文 http://www.ghugo.com/css-retina-hairline/主题 WebKit iOS CSS本文实际上想说的是ios8下 1px解决方案。 1px的边框在devicePixelRatio…

LeetCode—55. 跳跃游戏

55. 跳跃游戏 题目描述&#xff1a; 给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 考察重点&#xff1a;由前至后遍历数组&#xff0c;maxPos记录我们当…

ASP.NET----利用隐藏域向页面间数据传递

摘要&#xff1a; 隐藏域不会显示在用户的浏览器中&#xff0c; 一般是在页面中加入一个隐藏控件&#xff0c; 与服务器进行交互时把值赋给隐藏控件并提交给下一页面。隐藏域可以是任何存储在网页中的与网页有关的信息的存储库。 使用&#xff1a; 使用隐藏域存入数值时用&…

[转载]如何用关键字优化网站?

如何用关键字优化网站&#xff1f;     搜索引擎使用关键字的相关程度来决定网页的先后顺序。例如&#xff0c;如果有人搜索“ butterbeans ”&#xff0c;那么一个标题为“ the butterbean bazaar ”、里面有十余处单词“ butterbeans ”的网页&#xff0c;可能就会排在搜索…