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

[java基础-集合篇]优先队列PriorityQueue结构与源码解析

优先队列PriorityQueue

优先级队列表示为平衡二进制堆

queue[n] 的两个子级是 queue[2*n+1] 和 queue[2*(n+1)]。

注:左子节点index=2*parentIndex+1,右子节点index=2*parentIndex+2,源码中计算parent位置时就是这样反过来计算的

优先级队列按 comparator 排序,如果 comparator 为 null,则按元素的自然排序排序:对于堆中的每个节点 n 和 n 的每个后代 d,n

PriorityQueue 是一个基于优先级堆的无界优先级队列实现,它可以确保每次出队的元素都是队列中优先级最高(最小的)的元素。

PriorityQueue结构

PriorityQueue结构上是一个基于数组的“完全二叉树”,且“任意节点的值<=子节点的值”,是一个“小顶堆”。

完全二叉树:除最底层节点,其他层都是满的,并且最后一层的所有节点尽可能地靠左排列

PriorityQueue方法

add(E e)

实质是offer(E e)方法,元素首先被添加到数组末尾,然后通过siftUp方法向上调整位置以维持堆的性质

扩容grow(int minCapacity)

peek

取第一个元素

poll

取出第一个元素并删除。移除队列头部元素(即最小元素)时,会将数组最后一个元素移动到头部,然后通过siftDown方法向下调整位置以恢复堆的性质

两个方法和上浮方法一样,只是比较方式不同

PriorityQueue特点

不允许元素为null,无添加顺序(不会按照添加顺序来),自然顺序,线程不安全

使用位移运算代替乘除、提升运算效率。

PriorityQueue资料引用(推荐)

Java【优先级队列】详细图解 / 模拟实现 + 【PriorityQueue】常用方法介绍_java优先队列-CSDN博客

相关文章:

[java基础-集合篇]优先队列PriorityQueue结构与源码解析

优先队列PriorityQueue 优先级队列表示为平衡二进制堆&#xff1a; queue[n] 的两个子级是 queue[2*n1] 和 queue[2*&#xff08;n1&#xff09;]。 注&#xff1a;左子节点index2*parentIndex1,右子节点index2*parentIndex2,源码中计算parent位置时就是这样反过来计算的 优…...

12. C语言 数组与指针(深入理解)

本章目录: 前言1. 什么是数组&#xff1f;2. 数组的声明与初始化声明数组初始化数组 3. 访问数组元素遍历数组 4. 获取数组长度使用 sizeof 获取长度使用宏定义简化 5. 数组与指针数组名与指针的区别使用指针操作数组 6. 多维数组遍历多维数组 7. 数组作为函数参数8. 高级技巧与…...

Postman接口测试基本操作

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Postman-获取验证码 需求&#xff1a;使用Postman访问验证码接口&#xff0c;并查看响应结果。 地址&#xff1a;http://kdtx-test.itheima.net/api/captchaIm…...

MySQL--2.1MySQL的六种日志文件

大家好&#xff0c;我们来说一下MySQL的6中日志文件。 1.查询日志 查询日志主要记录mysql的select查询的&#xff0c;改配置是默认关闭的。不推荐开启&#xff0c;因为会导致大量查询日志文件储存占用你的空间。 举例查询一下 select * from class&#xff1b; 开启查询日志的命…...

spring task使用

Spring Task 简介 Spring Task 是 Spring 框架原生自带的任务调度框架&#xff0c;它犹如一把瑞士军刀&#xff0c;为开发者提供了丰富多样的功能&#xff0c;助力轻松创建和管理定时任务。相较于其他一些第三方任务调度框架&#xff0c;Spring Task 最大的优势在于其与 Sprin…...

【FPGA】时序约束与分析

设计约束 设计约束所处环节&#xff1a; 约束输入 分析实现结果 设计优化 设计约束分类&#xff1a; 物理约束&#xff1a;I/O接口约束&#xff08;例如引脚分配、电平标准设定等物理属性的约束&#xff09;、布局约束、布线约束以及配置约束 时序约束&#xff1a;设计FP…...

LLM的MoE由什么构成:门控网络,专家网络

LLM的MoE由什么构成:门控网络,专家网络 目录 LLM的MoE由什么构成:门控网络,专家网络专家网络门控网络MoE在联邦学习中的使用及原理专家网络 定义与特点:是一组独立的模型,每个模型都负责处理某个特定的子任务或学习输入空间的特定部分。这些专家可以是简单的线性回归模型…...

HTML-多媒体标签

除了图像&#xff0c;网页还可以放置视频和音频。 1.<video> <video>标签是一个块级元素&#xff0c;用于放置视频。如果浏览器支持加载的视频格式&#xff0c;就会显示一个播放器&#xff0c;否则显示<video>内部的子元素。 <video src"example.…...

MySQL笔记大总结20250108

Day2 1.where (1)关系运算符 select * from info where id>1; select * from info where id1; select * from info where id>1; select * from info where id!1;(2)逻辑运算符 select * from info where name"吴佩奇" and age19; select * from info wh…...

stm32week3

stm32学习 二.外设 8.TIM输出比较 OC(output compare)输出比较 输出比较可以通过比较CNT与CCR寄存器值的关系&#xff0c;来对输出电平进行置1、置0、翻转操作&#xff0c;用于输出一定频率和占空比的PWM波形 每个高级定时器和通用定时器都拥有4个输出比较通道 高级定时器的…...

uniapp 的uni.getRecorderManager() 录音功能小记

官网上明确说的是全局唯一并且只是获取对象&#xff0c;所以会导致一个问题就是&#xff0c;当你多个页面要用到这个对象的时候&#xff0c;会发现 onStop 方法会被覆盖&#xff0c;导致调用结果不是自己想要的 解决办法也简单粗暴&#xff0c;在需要用到的界面重新覆盖onStop…...

【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法

工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法&#xff0c;主要考察开发经验与技术水平&#xff0c;回答不佳会影响面试印象。提供四个回答方向&#xff0c;准备其中一个方向即可。 1、设计模式应用方向 以登录为例&#xff0c;未…...

RT-DETR代码详解(官方pytorch版)——参数配置(1)

前言 RT-DETR虽然是DETR系列&#xff0c;但是它的代码结构和之前的DETR系列代码不一样。 它是通过很多的yaml文件进行参数配置&#xff0c;和之前在train.py的parser argparse.ArgumentParser()去配置所有参数不同&#xff0c;所以刚开始不熟悉代码的时候可能不知道在哪儿修…...

腾讯云AI代码助手编程挑战赛-凯撒密码解码编码器

作品简介 在CTFer选手比赛做crypto的题目时&#xff0c;一些题目需要自己去解密&#xff0c;但是解密的工具大部分在线上&#xff0c;而在比赛过程中大部分又是无网环境&#xff0c;所以根据要求做了这个工具 技术架构 python语言的tk库来完成的GUI页面设计&#xff0c;通过…...

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…...

【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)

文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起&#xff0c;正向定位到当前行的首个字符 b2 从光标位置起&#xff0c;反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…...

GIC中断分组介绍(IMX6ull为例)

一、Cortex-A7内核中断 Cortex-A7内核具有多个中断类型&#xff0c;但其中最重要的是复位中断和IRQ&#xff08;普通中断请求&#xff09;中断。对于IMX6ULL而言&#xff0c;主要关注的是IRQ中断&#xff0c;因为外部设备和内部事件通常都会触发这类中断。 从左到右 中断控制…...

计算机网络期末复习(知识点)

概念题 在实际复习之前&#xff0c;可以看一下这个视频将网络知识串一下&#xff0c;以便更好地复习&#xff1a;【你管这破玩意叫网络&#xff1f;】 网络规模的分类 PAN&#xff08;个人区域网络&#xff09;&#xff1a;用于个人设备间的连接&#xff0c;如手机与蓝牙耳机…...

Apache XMLBeans 一个强大的 XML 数据处理框架

Apache XMLBeans 是一个用于处理 XML 数据的 Java 框架&#xff0c;它提供了一种方式将 XML Schema (XSD) 映射到 Java 类&#xff0c;从而使得开发者可以通过强类型化的 Java 对象来访问和操作 XML 文档。下面将以一个简单的案例说明如何使用 Apache XMLBeans 来解析、生成和验…...

飞凌嵌入式i.MX8M Mini核心板已支持Linux6.1

飞凌嵌入式FETMX8MM-C核心板现已支持Linux6.1系统&#xff0c;此次升级不仅使系统功能更加丰富&#xff0c;还通过全新BSP实现了内存性能的显著提升。 基于NXP i.MX8M Mini处理器设计开发的飞凌嵌入式FETMX8MM-C核心板&#xff0c;拥有4个Cortex-A53高性能核和1个Cortex-M4实时…...

百万至千万级参与者的人类暴露组计划,准备好了没

化学暴露组学是否已为人类暴露组计划做好准备&#xff1f; 本文梳理了暴露组学的学科发展历程&#xff0c;阐明化学暴露组是解析环境致病因素、补齐健康研究短板的核心要素&#xff1b;总结了以高分辨质谱为核心的化学暴露组学在检测、采样与数据分析上的技术突破&#xff1b;…...

Python之vyvert包语法、参数和实际应用案例

一、vyvert 包概述&#xff08;Python&#xff09; vyvert&#xff08;0.1.0&#xff09;是一个轻量级依赖注入&#xff08;DI&#xff09;库&#xff0c;灵感来自 pytest 与 FastAPI&#xff0c;主打简洁注解式注入、自动依赖解析、异步兼容。 定位&#xff1a;非侵入式 DI&am…...

歌词滚动姬终极指南:免费快速制作专业LRC歌词的完整教程

歌词滚动姬终极指南&#xff1a;免费快速制作专业LRC歌词的完整教程 【免费下载链接】lrc-maker 歌词滚动姬&#xff5c;可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 歌词滚动姬&#xff08;LRC Maker&#xff09;是…...

数据库安全与权限管理

数据库安全与权限管理 1. 技术分析 1.1 数据库安全概述 数据库安全是保护数据资产的关键&#xff1a; 安全威胁未授权访问: 密码泄露SQL注入: 恶意SQL数据泄露: 敏感信息暴露数据篡改: 非法修改安全措施:访问控制加密存储审计日志1.2 权限管理 权限级别全局权限: ALL PRIVILEGE…...

RISC-V开发板测评实战:从申请到深度评测的完整指南

1. 项目概述&#xff1a;一次深度参与RISC-V生态的绝佳机会最近在电子发烧友论坛上看到了一个挺有意思的活动——“第二届RISC-V开发板测评大赛”&#xff0c;主办方是昊芯。对于咱们这些搞嵌入式、玩单片机、或者对开源硬件和RISC-V架构感兴趣的朋友来说&#xff0c;这绝对是一…...

碳感知Transformer与硬件协同优化框架解析

1. CATransformers&#xff1a;碳感知Transformer与硬件协同优化框架解析在AI技术快速发展的今天&#xff0c;Transformer模型已成为自然语言处理、计算机视觉和多模态任务的核心架构。然而&#xff0c;这些模型的广泛部署带来了显著的碳排放问题——不仅包括训练和推理过程中的…...

LabVIEW开发者峰会:破解信息孤岛,构建实战技术生态

1. 为什么我们需要一场专属的LabVIEW开发者峰会&#xff1f;如果你是一名长期使用LabVIEW进行测控系统开发的工程师&#xff0c;可能经历过这样的场景&#xff1a;面对一个复杂的同步采集需求&#xff0c;你翻遍了官方帮助文档和范例&#xff0c;却总觉得方案不够优雅&#xff…...

用C#给PowerMill做个外挂:手把手教你写第一个连接与断开PM的WinForm工具

用C#打造PowerMill效率工具&#xff1a;从零构建自动化控制面板 在CNC编程工程师的日常工作中&#xff0c;PowerMill作为行业领先的CAM软件&#xff0c;其强大的功能背后也隐藏着大量重复性操作。每天数十次的项目打开关闭、连接状态检查、刀具路径查询等机械式点击&#xff0c…...

别再硬编码了!用Unity动画事件实现音效与攻击判定的动态解耦(附完整C#脚本)

告别硬编码&#xff1a;Unity动画事件驱动的模块化开发实战 在游戏开发中&#xff0c;动画系统与游戏逻辑的耦合常常成为后期维护的噩梦。想象一下这样的场景&#xff1a;每次调整动画帧数都需要同步修改代码中的硬编码数值&#xff0c;或者音效资源路径被直接写在脚本里导致资…...

物联网平台融资潮解析:从资本流向看行业技术演进与未来格局

1. 项目概述&#xff1a;为什么我们要关注物联网平台的融资潮&#xff1f;最近几年&#xff0c;如果你在科技圈里待着&#xff0c;很难不注意到一个现象&#xff1a;那些做物联网开发平台的公司&#xff0c;动不动就宣布完成了上亿甚至数亿美元的融资。这已经不是个别现象&…...