焦点日报:PriorityQueue(优先队列)是堆还是最小?PriorityQueue详解
优先队列
PriorityQueue(优先队列)采用的是堆排序, 实际上是一个堆(不指定Comparator时默认为最小堆) 队列既可以根据元素的自然顺序来排序,也可以根据 Comparator来设置排序规则。 队列的头是按指定排序方式的最小元素。如果多个元素都是最小值,则头是其中一个元素。 新建对象的时候可以指定一个初始容量,其容量会自动增加。
(资料图)
注意1:该队列是用数组实现,但是数组大小可以动态增加,容量无限。
注意2:队列的实现不是同步的。不是线程安全的。如果多个线程中的任意线程从结构上修改了列表, 则这些线程不应同时访问 PriorityQueue实例。保证线程安全可以使用PriorityBlockingQueue 类。
注意3:不允许使用 null 元素。
注意4:插入方法(offer()、poll()、remove() 、add() 方法)时间复杂度为O(log(n)) ;remove(Object) 和 contains(Object) 时间复杂度为O(n);检索方法(peek、element 和 size)时间复杂度为常量。
注意5:方法iterator()中提供的迭代器并不保证以有序的方式遍历优先级队列中的元素。(原因可参考PriorityQueue的内部实现)如果需要按顺序遍历,可用Arrays.sort(pq.toArray())。
注意6:可以在构造函数中指定如何排序。如:PriorityQueue() 使用默认的初始容量(11)创建一个 PriorityQueue,并根据其自然顺序来排序其元素(使用Comparable)。 PriorityQueue(int initialCapacity) 使用指定的初始容量创建一个 PriorityQueue,并根据其自然顺序来排序其元素(使用 Comparable)。 PriorityQueue(int initialCapacity, Comparator comparator) 使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器comparator来排序其元素。
注意7:此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选 方法。
PriorityQueue对元素采用的是堆排序,头是按指定排序方式的最小元素。堆排序只能保证根是最大(最小),整个堆并不是有序的。方法iterator()中提供的迭代器可能只是对整个数组的依次遍历。也就只能保证数组的第一个元素是最小的。
因此使用方法提供iterator()的不保证是以有序的方式遍历优先级队列的元素 示例:自己指定比较器进行排序
@Testpublic void testPriorityQueue(){//默认采用的是最小堆实现的 PriorityQueuequeue = new PriorityQueue(10,new Comparator(){public int compare(Integer a, Integer b){return a-b; //if a>b 则交换,so这是递增序列 } }); queue.offer(13); queue.offer(9); int len = queue.size(); for(int i=0;i<LEN;I++){System.out.println(queue.poll()); } //输出 9 13 //默认采用的是最小堆实现的 PriorityQueuequeue2 = new PriorityQueue<>(10); queue2.offer(11); queue2.offer(9); len = queue2.size(); for(int i=0;iSystem.out.println(queue2.poll()); } //输出 9, 11 }
完整例子:
public class PriorityQueueTest{public static void main(String args[]){PriorityQueuequeue = new PriorityQueue(11, new Comparator() {public int compare(People p1, People p2) {return p2.age - p1.age; } }); for (int i = 1; i <= 10; i++) {queue.add(new People("张"+ i, (new Random().nextInt(100)))); } while (!queue.isEmpty()) {System.out.println(queue.poll().toString()); } } } class People {String name; int age; public People(String name, int age){this.name = name; this.age = age; } public String toString() {return "姓名:"+name + " 年龄:" + age; } }
标签:
相关推荐:
最新新闻:
- d盘打不开怎么办? b盘打不开解决方法
- 电磁调速电机是什么原理?电磁调速电机常见故障分析
- 如何理解KMT字符串匹配算法?如何计算出KMT数组?
- 焦点日报:PriorityQueue(优先队列)是堆还是最小?PriorityQueue详解
- 天天热门:NCBI-BLAST在线使用教程详细攻略(图解)
- 全球信息:【RL】算法简介与实现 Value-Based-Learning算法
- 电阻的单位是什么?SMT贴片电阻510R与510K的区别在哪?
- 环球看热讯:【企业版】Mule3的新增特点-云连接
- 天天观焦点:对数的计算公式是什么?对数的计算公式性质及推导过程
- 环球速读:如何使用using声明防止命名冲突?命令空间的using声明
- 当前视点!戴尔XPS15/17笔记本2023款发布:搭载13代酷睿+40系显卡
- 对标比亚迪唐,领克大5座SUV领克08来了,或搭载魅族Flyme Auto车机
- 世界微动态丨《爆衣战士 零》Steam页面上线 支持简繁体中文
- 打赢了!科比坠机照片泄露案其遗孀获赔2885万美元
- 报道:iPhone16Pro有望采用屏下面容 2026年用上屏下摄像头
- 微美全息开发基于图像处理的动态手势交互系统:全球热点评
- 环球观速讯丨努比亚发布裸眼3D平板电脑
- 努比亚Z50 Ultra影像参数公布:35mm+85mm最佳拍档_天天聚看点
- 新华三集团亮相CHINC,以数字技术助力智慧医院高质量发展-百事通
- 新华三:以融合网络技术支撑智慧医院全场景业务数字变革 今热点
- 全球规模最大锂资源采选冶一体化项目在新疆和田启动_今日观点
- 《守望先锋2》匹配机制糟糕 开发者回应
- 停售6年的PS3再次获得固件更新 提高了系统性能_天天热门
- SOC射击新游《The Front》登陆Steam 预告片首曝
- 《最终幻想16》将不会有多个难度选项 新游戏+包含新战斗-每日精选
- Windows 11发布更新 iPhone也能连接PC了_天天日报
- 热点聚焦:融合创新,领军2023!鸿合科技联手合作伙伴加速推进幼教数字化
- 首发2399元!vivo S16新配色“春日悠蓝”今天正式预售_天天热文
- 世界快看:ChatGPT赋能?微软或将人工智能引入Windows 11
- 天天热资讯!VMware在MWC 2023发布创新成果,帮助扩展电信运营商和企业的5G能力
- 全球快资讯:iPhone SE 4今年发布:6.1英寸全面屏 京东方提供
- 国风城镇叠叠乐 《重檐》Steam页面上线
- 全球消息!新疆队宣布退出CBA联赛捐献全部资产 周琦做出回应
- 房东纠纷 英国国家电子游戏博物馆团队被锁在门外|新要闻
- 新动态:《最终幻想16》试玩版将于发售前两周推出 支持存档继承
- 【新要闻】北欧游戏展被员工指控 调查结果:或违反《反歧视法》
- SteamDeck二月热门游戏 《霍格沃兹之遗》登顶_每日快讯
- crampfish_世界看点
- 国产动作游戏《斩妖行2》开发中 沙漠截图欣赏-快消息
- 环球新动态:三星980 PRO固态硬盘大促:1TB 649元
- 天天快资讯丨印度把苹果坑了:代工还是富士康靠谱
- 环球微资讯!库存压力来了:显卡销量暴跌43%!
- 苹果重启iPhone SE 4:京东方屏幕!|环球速看
- 环球快看点丨捡漏!4K IPS显示器659元
- PLC触摸屏一体机是什么?触摸屏控制PLC的原理有哪些?
- 设备管理器打不开如何解决?设备管理器打不开解决方法
- u盘读写速度是多少?查看u盘读写速度的方法
- PS阈值主要用来做什么?PS阈值抠图教程
- 怎么将esd格式转换成iso格式?esd文件转换iso的方法
- 路由器的核心功能是什么?推荐几款核心路由器及相应报价
- 石家庄一快餐店推2万元豪华板面:与宣传不符可举报 环球热门
- 《最终幻想16》制作人:请别说“我不买PS5版 PC版还有半年就出”-天天看热讯
- 路由器的核心功能是什么?推荐几款核心路由器及相应报价
- 路由器管理员密码是什么?路由器的管理员密码详细介绍
- 环球观察:柯南最新剧场版《黑铁的鱼影》最新预告 4月14日上映
- 环球播报:机械制作模拟《Plasma》steam抢测 从机器人到街机制作
- 环球微速讯:《暗黑破坏神4》玩家打怪时 不会出现夸张伤害数值
- 《命运2:光陨之秋》现已上线,迎接我们的终局!
- 骁龙636处理器性能怎么样?高通骁龙636处理器性能详解
- 魔兽世界暗夜要塞入口怎么走?去暗夜要塞入的方法介绍
- 如何设置进入待机快捷键?待机快捷键的设置方法
- directx9.0c是什么软件?directx9.0c如何安装使用?
- 汉翔大将军手写板驱动怎么用?汉翔大将军手写板驱动安装说明常见问题解答
- Word目录怎样做?Word目录怎么自动生成?Word目录操作方法介绍
- 弹出winlogon.exe应用程序错误怎么办?winlogon.exe应用程序错误原因分析及解决方法
- SmartPrinter支持哪些格式?SmartPrinter文档转换方法
- Usb无法识别的原因是什么?电脑usb无法识别的处理步骤
- 本地连接不见了怎么办?本地连接不见了原因分析及解决方案介绍
- 940MX显卡怎么样?GeForce 940MX详细测评
- 拳头账号怎么注册?拳头账号密码忘了怎么找回?
- tcpip.sys文件造成电脑蓝屏怎么解决?tcpip.sys文件造成电脑蓝屏修复方法
- 全球即时:小米无线键鼠套装2开售:首发价89 元
- 12G+512G旗舰机超值价2149元!
- 苹果MR头显隔空打字:iPhone要酸了|全球观天下
- iPhone 15 Pro Max曝光:更厚更重了
- 2023年最完美全面屏!努比亚Z50 Ultra官宣3月7日发布
- 香奈儿回应2万包包15分钟断了:可以就近选择精品店进行售后评估 环球热讯
- Xbox老板:《使命召唤》不会学《霍格沃茨之遗》搞独占内容-环球要闻
- 《最终幻想16》的故事有浪漫色彩 兄弟家庭国家之爱|新要闻
- 沧海电视剧李山魁找组织是第几集_电视剧内容介绍 环球通讯
- 环球热消息:梅西FIFA最佳连续三年第一票投给内马尔:姆巴佩顺位第二
- 《杀手》开发商开发新IP:在线幻想RPG游戏
- 今亮点!2023款欧拉好猫电车上市,售价12.98-16.58万元
- 吉田直树表示《最终幻想16》不会有多种难度选项-每日热讯
- 致敬魂斗罗《地狱之魂》即将更新双人合作玩法|世界视讯