当前位置: 首页 > news >正文

A Guide to PriorityQueue

原文链接:https://blog.csdn.net/ohwang/article/details/116934308


PriorityQueue 又叫 优先队列


注意1:
PriorityQueue是用数组实现,数组大小可以动态增加,容量无限。
优先队列采用的是堆排序(默认为最小堆)。堆排序只能保证根是最大(最小),整个堆并不是有序的。

注意2:
非线程安全。线程安全可以用PriorityBlockingQueue

注意3:
不允许使用 null 元素。

注意4:
offer()poll()remove()add() 时间复杂度为O(log(n))
remove(Object)contains(Object) 时间复杂度为O(n)
peekelementsize 时间复杂度为O(常量)

注意5:
方法iterator()中提供的迭代器并不保证以有序的方式遍历优先级队列中的元素。
如果需要按顺序遍历,可用Arrays.sort(pq.toArray())

注意6: 可以在构造函数中指定如何排序。

# 默认的初始容量(11)
PriorityQueue(int initialCapacity)
# 使用指定的初始容量创建一个 PriorityQueue,并根据其自然顺序来排序其元素。PriorityQueue(int initialCapacity, Comparator<? super E> comparator)
# 使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器comparator来排序其元素。

注意7: 此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选 方法。


# 默认升序
PriorityQueue<Integer> queue2 = new PriorityQueue<>(10);
queue2.offer(11);
queue2.offer(9);
int len = queue2.size();
for (int i = 0; i < len; i++) {System.out.println(queue2.poll());
}
//输出 9 11# 自定义降序
PriorityQueue<Integer> queue = new PriorityQueue<>(10, (a, b) -> b - a);
queue.offer(13);
queue.offer(9);
int len1 = queue.size();
for (int i = 0; i < len1; i++) {System.out.println(queue.poll());
}
//输出 13 9
# 模拟业务使用
PriorityQueue<People> queue = new PriorityQueue<>(11, (p1, p2) -> 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;}
}姓名:张9 年龄:67
姓名:张1 年龄:66
姓名:张8 年龄:65
姓名:张7 年龄:54
姓名:张4 年龄:48
姓名:张2 年龄:41
姓名:张5 年龄:39
姓名:张3 年龄:26
姓名:张6 年龄:11
姓名:张10 年龄:0

相关文章:

A Guide to PriorityQueue

原文链接&#xff1a;https://blog.csdn.net/ohwang/article/details/116934308 PriorityQueue 又叫 优先队列 注意1&#xff1a; PriorityQueue是用数组实现&#xff0c;数组大小可以动态增加&#xff0c;容量无限。 优先队列采用的是堆排序&#xff08;默认为最小堆&#xff…...

Jenkins教程—构建多分支流水线项目

本教程向你展示如何使用Jenkins协调一个用 Node Package Manager (npm) 管理的简单 Node.js 和 React 项目&#xff0c; 并同时 为开发和产品环境交付不同的结果。 在开始本教程之前&#xff0c;建议你前往 教程概览 页面&#xff0c;并至少完成一个 介绍教程&#xff0c; 从而…...

【vxe-table】@enter.keyup.native实现在列表中回车光标向右移动聚焦及vxe-table的一些方法的使用(具体实现+踩坑篇)

需求&#xff1a; vxe-table表格 1、新增的时候&#xff0c;vxe-table第一行的第一个输入框聚焦 2、输入完成后&#xff0c;按回车&#xff0c;自动跳到同一行的下一个输入框 3、当在同一行的最后一个输入框输入完成后&#xff0c;按回车跳回第一个输入框并选中状态且复选框为选…...

科技资讯|苹果Vision Pro获得被动冷却系统及数字表冠控制界面专利

据patentlyapple报道&#xff0c;美国专利商标局正式授予苹果一项与头戴式设备&#xff08;Apple Vision Pro&#xff09;相关的专利11751366&#xff0c;该设备可以提供被动冷却系统&#xff0c;利用光学组件的表面来管理热量&#xff0c;而不会对用户显示的视觉信息产生不利影…...

【悬溺】Flyway的纯爱时刻

文章目录 文档背景你好Demo地址Flyway的CPU时刻&#xff08;工作流程&#xff09;她在哪Flyway的使用流程官方文档 文档背景 由于维护项目的哥们们技术水平参差不齐&#xff0c;长短不一。故做此篇文章。多点纯爱&#xff0c;这个世界需要纯爱战士! 你好 Flyway是一款开源的数据…...

Linux权限介绍

引言 Linux中有两种用户&#xff1a;超级用户&#xff08;root&#xff09;、普通用户 超级用户&#xff1a;在Linux中能做任何事&#xff0c;不受到权限的限制普通用户&#xff1a;会受到权限的限制超级用户的命令提示符是#&#xff0c;普通用户的命令提示符是$ 命令&#xff…...

git:一个本地仓库绑定多个远程的方法以及遇到的问题

绑定方法见知乎大佬&#xff1a;本地Git仓库关联多个远程仓库的两种方法 一般情况下&#xff0c;没人这么搞&#xff01; 但是公司迁移git仓库阶段&#xff0c;xx云环境上的gitlab要有操作记录&#xff0c;不然影响整体评分&#xff0c;这就不得一个本地仓库关联了原来的仓库新…...

如何将WPS设置为默认的办公软件

很多小伙伴的电脑中有好几种办公软件&#xff0c;每次打开文档表格都要进行选择&#xff0c;有小伙伴想要将WPS设置成默认的办公软件该怎么操作呢&#xff0c;下面小编就给大家详细介绍一下将WPS设置为默认的办公软件的方法&#xff0c;有需要的小伙伴快来和小编一起看一看吧。…...

css 文本溢出隐藏,显示省略号

单行隐藏 overflow:hidden; //超出的文本隐藏text-overflow:ellipsis; //溢出用省略号显示white-space:nowrap; //溢出不换行多行隐藏 overflow:hidden; text-overflow:ellipsis; display:-webkit-box; //将对象作为弹性伸缩盒子模型显示。 -webkit-box-orient:vertical; //从…...

构建普适通用的企业网络安全体系框架

在当今数字化时代&#xff0c;网络安全已成为企业保护信息资产和业务运行的重要任务。恶意攻击、数据泄露、网络病毒等威胁不断演进&#xff0c;给企业和个人带来了巨大风险。为了应对这一挑战&#xff0c;许多企业已经采取了一系列网络安全措施&#xff0c;如制定了网络安全政…...

TinTin Web3 动态精选:以太坊基金会推出 EELS、Arbitrum Stylus 上线

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…...

软考高级架构师下篇-14面向服务架构设计理论

目录 1. 引言2. SOA的相关概念3. SOA的发展历史4. SOA的参考架构5. SOA 主要协议和规范6. SOA设计的标准要求7. SOA的作用与设计原则8. SOA的设计模式9. SOA构建与实施10. 前文回顾1. 引言 在面向服务的体系结构(Service-Oriented Architecture,SOA)中,服务的概念有了延伸…...

HTTP 和 HTTPS

一.HTTP HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于在网络上传输超文本&#xff08;Hypertext&#xff09;和其他资源的应用层协议。HTTP是Web中最常用的协议之一&#xff0c;它使得浏览器可以请求和显示网页&#xff0c;也允许服务器传送网页内容和其…...

linux使用stress命令进行压力测试cpu

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…...

创建vue3项目并引用elementui

1.创建vu3项目&#xff1a; vue3官网&#xff1a;简介 | Vue.js 执行命令 npm create vuelatest 2.终端会出现如下选项&#xff0c;不确定的直接enter键进入下一步&#xff1b; 3.然后再执行下方命令&#xff1a; cd <your-project-name> npm install4.安装依赖成功…...

《C++ Primer》第2章 变量(二)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 2.4 const限定符&#xff08;P53&#xff09; 由于 const 对象在创建后不能修改&#xff0c;所以其必须初始化。 const 对象的常量特征仅在执行改变该变量的操作时才会发生作用。 const 对象默认仅在文件…...

Vue3统一导出局部组件和全局组件

局部组件统一导出 components新增ComponentA.vue、ComponentB.vue两个组件 新增index.js进行组件统一导入 import ComponentA from ./ComponentA.vue import ComponentB from ./ComponentB.vueexport {ComponentA,ComponentB }使用 <template><ComponentA /><…...

【笔试强训选择题】Day36.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01; 文章目录 前言一、Day…...

【软考】系统架构设计师 - 知识扩展 - “区块链技术“

目录 一 简介&#x1f451; 1 比特币❤️ 2 区块链的特点❤️ 3 共识算法❤️ 二 练习题&#x1f451; 三 扩展&#x1f451; 1 哈希算法❤️ 2 哈希指针❤️ 3 UTXO❤️ 4 参考资料❤️ 一 简介&#x1f451; 1 比特币❤️ 比特币底层采用了区块链技术。 比特币交易…...

Pytorch 分布式训练(DP/DDP)

概念 PyTorch是非常流行的深度学习框架&#xff0c;它在主流框架中对于灵活性和易用性的平衡最好。 分布式训练根据并行策略的不同&#xff0c;可以分为模型并行和数据并行。 模型并行 模型并行主要应用于模型相比显存来说更大&#xff0c;一块 GPU 无法加载的场景&#xf…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...