「数据结构」优先级队列

🎇个人主页:Ice_Sugar_7
🎇所属专栏:Java数据结构
🎇欢迎点赞收藏加关注哦!

优先级队列

  • 🍉前言
  • 🍉构造方法
  • 🍉基本方法
  • 🍉注意事项

🍉前言

优先级队列底层是用堆实现的,关于堆的实现,之前的文章已经详细介绍过了,文章链接:二叉树1:堆的实现

🍉构造方法

方法功能
PriorityQueue()创建一个空的优先级队列,默认容量是11
PriorityQueue(int initialCapacity)创建一个初始容量为initialCapacity的优先级队列(注意:initialCapacity不能小于1,否则会抛IllegalArgumentException异常)
PriorityQueue(Collection<? extends E> c)将一个包含指定类型元素的集合c添加到新建的PriorityQueue中
PriorityQueue(int initialCapacity, Comparator<? super E> comparator)使用比较器来初始化PriorityQueue(可以不传initialCapacity,此时使用默认容量)

注意:要将自定义类型的对象存放到PriorityQueue时,通常需要传入一个比较器,重写compare方法来定义对象之间的优先级顺序

在Java中,PriorityQueue默认是小堆,如果要将其转化为大堆,就要用比较器初始化PriorityQueue

public class MaxHeapExample {public static void main(String[] args) {// 创建一个Comparator,定义从大到小的比较规则Comparator<Integer> maxHeapComparator = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2 - o1; // 从大到小排序}};// 使用maxHeapComparator创建一个大堆PriorityQueuePriorityQueue<Integer> maxHeap = new PriorityQueue<>(maxHeapComparator);// 向大堆中添加元素maxHeap.add(3);maxHeap.add(1);maxHeap.add(5);maxHeap.add(2);// 此时PriorityQueue中的元素将按照大堆的规则排列// 输出:[5, 3, 1, 2]System.out.println(maxHeap);}
}

🍉基本方法

方法功能
boolean offer(E e)插入元素e,插入成功返回true。如果e对象为空,则抛出NullPointerException异常(即不能插入null)
E peek()获取优先级最高的元素(就是堆顶元素),如果优先级队列为空,返回null
E poll()移除优先级最高的元素并返回,如果优先级队列为空,返回null
int size()获取有效元素的个数
void clear()清空
boolean isEmpty()检测优先级队列是否为空,若为空,则返回true

🍉注意事项

  • PriorityQueue中放置的元素必须要能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常
  • 不能插入null对象,否则会抛出NullPointerException
  • 没有容量限制,可以插入任意多个元素,因为其内部可以自动扩容
  • 插入和删除元素的时间复杂度为O(logN)
  • PriorityQueue默认情况下是小堆——即每次获取到的元素都是最小的元素

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

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

相关文章

幻兽帕鲁服务器原来的存档不想玩了,怎么清档?如何重来?

如果需要备份原存档的话&#xff0c;就先把存档导出来备份。或者手动去服务器文件里找到游戏存档文件夹&#xff0c;保存下载。 如无需备份原存档&#xff0c;则可以直接使用幻兽帕鲁应用模板&#xff0c;来重装服务器的操作系统。 方法很简单&#xff1a; 详细教程地…

odoo封装字段widget中无感知刷新数据

常规操作是直接刷新页面 window.location.reload(); 深入源码&#xff0c;发现页面controller层有reload 对应tree的字段widget this.__owl__.parent.parentWidget.__parentedParent.reload(); 对应form的字段widget this.__parentedParent.__parentedParent.reload()

在RTX3050上安装python3.9、anaconda、pycharm、cuda11.6、cudnn、jupyter等工具的详细步骤和方法

在RTX 3050上安装Python 3.9、Anaconda、PyCharm、CUDA 11.6、cuDNN和Jupyter的详细步骤如下&#xff1a; 安装Python 3.9&#xff1a; 下载Python 3.9的安装包&#xff08;Windows&#xff1a;https://www.python.org/downloads/windows/&#xff0c;macOS&#xff1a;https:/…

APP inventor零基础移动应用开发

1.Android平台简介 Android由谷歌和开放手机联盟共同创建的一款针对手机的开源软件工具包 主要特色 ---开放性 – 丰富的硬件选择 – 开发商不受任何限制 – 无缝集成互联网服务 App Inventor是由Google公司开发的一款在线开放的Android编程工具软件&#xff0c;通过图形化…

c++静态对象,内联函数,析构函数,拷贝构造函数

c静态对象 静态成员在类的所有对象中是共享的。 静态成员函数即使在类对象不存在的情况下也能被调用。 c内联函数 可以在函数里的任意地方调用。 函数代码将会加载在每个调用函数的地方&#xff0c;编译的机器代码中已经插入这些函数&#xff0c;所以修改内联函数后需要重新…

第十一章 以编程方式使用 SQL 网关

文章目录 第十一章 以编程方式使用 SQL 网关获取样本示例创建和使用外部数据集 第十一章 以编程方式使用 SQL 网关 注意&#xff1a;本节假设具有使用 ODBC API 调用的丰富经验 - 它无意提供有关如何使用 ODBC 函数的详细信息。如果遇到任何问题&#xff0c;可以通过启用 IRIS…

huggingface学习|用dreambooth和lora对stable diffusion模型进行微调

目录 用dreambooth对stable-diffusion-v1-5模型进行微调&#xff08;一&#xff09;模型下载和环境配置&#xff08;二&#xff09;数据集准备&#xff08;三&#xff09;模型微调&#xff08;四&#xff09;运行微调后的模型 用lora对stable-diffusion-v1-5模型进行微调&#…

【C语言】动态内存深入了解(一口气刨根问底学完系列,全乎,建议三连点赞收藏)

目录 1.动态内存分配的原因 2.动态内存函数的介绍 2.1malloc和free函数 2.2calloc函数 2.3realloc函数 3. 常见的动态内存错误 3.1 对NULL指针的解引用操作 3.2 对动态开辟空间的越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态开辟内存的一部…

Swift 初见

Swift 初见 学习swift的记录 控制台输出 print("hello world")可以无分号&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 变量声明 let 常量声明 如果在常量声明后再次修改他会报错 var 变量声明 一个常量的值&#xf…

linux应用 进程间通信之共享内存(POSIX)

1、前言 1.1 定义 POSIX共享内存是一种在UNIX和类UNIX系统上可用的进程间通信机制。它允许多个进程共享同一块内存区域&#xff0c;从而可以在这块共享内存上进行读写操作。 1.2 应用场景 POSIX共享内存适用于需要高效地进行大量数据交换的场景&#xff0c;比如多个进程需要…

SpringBoot数据请求和响应

二、SpringBoot请求 使用工具Postman&#xff1a;网页测试与发送网页请求的接口测试工具 2.1、接受简单参数 1&#xff09;原始结构接受参数 原始的web程序中&#xff0c;获取请求参数&#xff0c;需要通过HttpServelRequest对象获取&#xff0c;使用内部的getParamet…

动态规划:解密优化问题的利器

在计算机科学和数学领域&#xff0c;动态规划&#xff08;Dynamic Programming&#xff09;是一种优化问题的方法。它通过将问题分解为更小的子问题&#xff0c;并将解决子问题的结果保存起来&#xff0c;从而避免了重复计算。动态规划在解决各种优化问题和决策问题中发挥着重要…

upload-labs文件上传漏洞靶场

第一关 <?php eval ($_POST[123]);?>发现他这个是通过客户端前端写了一个限制 我们禁用srcipt即可 蚁剑成功打开 第二关 我们上传文件2.php它提示我们文件类型不正确 我们可以联想到做了后缀检测 我们通过burp抓包修改后缀 第三关 我们上传一个.php文件不可上…

腾讯ieg游戏运营开发蓝鲸一面24.02.02

专业跨度比较大&#xff0c;为什么不转专业&#xff1f; 两段实习分别收获了什么&#xff1f;实习和项目经验比较丰富&#xff0c;机会怎么得来的&#xff1f; Mysql的存储引擎&#xff1f; Mysql什么时候不能用索引&#xff1f;&#xff08;索引失效&#xff1f;&#xff0…

Peter算法小课堂—区间模型

Peter Pan来啦…… 最大不重叠区间数 二话不说&#xff0c;先来一道题 大家想想怎么贪心&#xff1f;我们可以将每一个美食摊位抽象成一个区间&#xff0c;区间左端点为开始排队时间&#xff0c;右端点为结束排队时间。其中&#xff0c;时间信息可以用数轴表示。 额……我们…

day1-闯入 Linux运维世界

1.解释我们正在使用哪些互联网行业的软件&#xff0c;移动端&#xff1f;PC端&#xff1f; 移动端软件和服务&#xff1a; 如微信、微博、抖音等如淘宝、京东、拼多多等如支付宝、微信支付等如高德地图、百度地图等如滴滴出行、Uber等 PC端软件和服务&#xff1a; 办公软件&…

【分布式技术专题】「Zookeeper中间件」Paxos协议的原理和实际运行中的应用流程分析

Paxo算法介绍 Paxos算法是莱斯利兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。 Paxos产生背景 Paxos算法是基于消息传递且具有高度容错特性的一致性算法&#xff0c;是目前公认的解决分布式一致性问题最有效的算法之一&#xff0c;其解决的问题就是在分…

nginx用域名http://xx.com/aaa/代理一个网页http://ff.com但是请求资源时发生404

哎&#xff0c;还得是chatgpt&#xff0c;难道就没有人有这种使用场景吗&#xff1f;没查到一个配置是有效的。 我&#xff1a; 我配置了nginx反向代理&#xff0c;用域名http://xx.com/aaa/代理一个网页http://ff.com&#xff0c; 但是请求资源时发生404&#xff0c;如何解决&…

【langchain中自定义LLM together为例子】

为了在LangChain中使用TogetherAI&#xff0c;我们必须扩展基本LLM抽象类。 这里有一个创建自定义LLM包装器的示例代码&#xff08;https://python.langchain.com/docs/modules/model_io/llms/custom_llm&#xff09;&#xff0c;但我们将通过类型验证、异常处理和日志记录使其…

C++ 位运算

任何信息在计算机中都是采用二进制表示的&#xff0c;数据在计算机中是以补码形式存储的&#xff0c;位运算就是直接对整数在内存中的二进制位进行运算。由于位运算直接对内存数据进行操作&#xff0c;不需要转换成十进制&#xff0c;因此处理速度非常快。 一、位运算符 C 提…