优先级队列(PriorityQueue)

ops/2024/11/3 2:20:48/

优先级队列(PriorityQueue)

  • 1. PriorityQueue的特性
  • 2. PriorityQueue常用方法介绍
    • 常用构造方法
    • 常用的普通方法

1. PriorityQueue的特性

  1. 使用时必须导入PriorityQueue所在的包,即
    import java.util.PriorityQueue;
  2. PriorityQueue中所放置的元素必须能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常(类型转换异常)
  3. 不能插入null对象,否则会抛出NullPointerException异常(空指针异常)
  4. 没有容量限制,可以插入任意多个元素,其内部可以自动扩容
  5. 插入元素和删除元素的时间复杂度都是O(log2N)
  6. PriorityQueue底层是使用堆这种数据结构
  7. PriorityQueue默认情况下是小根堆,即每次获取到的元素都是最小的元素

2. PriorityQueue常用方法介绍

常用构造方法

在这里插入图片描述

  • 第一个是无参的构造方法
  • 第二个构造方法是创建一个初始容量为形参的优先级队列,注意:传过去的形参不能小于1,否则会抛出IllegalArgumentException异常。一般在创建优先级队列对象时,如果知道元素个数,建议直接将底层容量给好,如果后续需要扩容时,需要开辟更大的空间,拷贝元素,这样效率会比较低
  • 第三个构造方法是传比较器,设置该优先级队列底层是建大根堆还是小根堆,默认是建小根堆;另外,建堆的元素是一个个对象时,需要传比较器
  • 第四个构造方法是既设置了优先级队列的初始容量,又传了比较器
  • 第五个构造方法是用一个集合来创建优先级队列
public class Test {public static void main(String[] args) {// 创建一个空的优先级队列,底层默认容量是11PriorityQueue<Integer> q1 = new PriorityQueue<>();// 创建一个初始容量为100的优先级队列PriorityQueue<Integer> q2 = new PriorityQueue<>(100);ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);// 用ArrayList对象来构造一个优先级队列的对象PriorityQueue<Integer> q3 = new PriorityQueue<>(list);}
}

常用的普通方法

  1. boolean offer(E e)
    插入元素e
  2. E peek()
    获取优先级最高的元素,若优先级队列为空,则返回null
  3. E poll()
    移除优先级最高的元素,如果优先级队列为空,则返回null
  4. int size()
    获取有效元素的个数
  5. void clear()
    清空优先级队列
  6. boolean isEmpty()
    判断优先级队列是否为空,为空则返回true

http://www.ppmy.cn/ops/130576.html

相关文章

redolog与binlog的写入机制

redo log 事务在执行的过程中&#xff0c;生成的redo log是要先写到redo log buffer中的。redo log buffer里面的内容不需要每次生成后都直接持久化到磁盘。 如果事务执行期间MySQL发生异常重启&#xff0c;那这部分日志就丢了&#xff0c;但是由于没有commit&#xff0c;所以…

el-table 修改高亮行样式

el-table 修改高亮行样式 <el-table reftable :data"tableData" highlight-current-row></el-table>修改样式 ::v-deep .el-table__body tr.current-row > td {background: #e1e1e1 !important;color: #000 !important; }

国自然基金项目撰写技巧

原文链接&#xff1a;国自然基金项目撰写技巧https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247625527&idx5&sn47c81dafb938fbc1da19e9a745f7bd5c&chksmfa8daad0cdfa23c6973c85a334373392b3edaad4a6d8661e53cd39e1d02aac5d035cad429cd2&token91245…

大数据-204 数据挖掘 机器学习理论 - 混淆矩阵 sklearn 决策树算法评价

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

MFC文件管理-学习笔记

CFileDialog封装用于文件打开操作或文件保存操作的常见对话框&#xff0c;继承于CCommonDialogCFileDialog的公共数据成员&#xff1a;m_ofn:Windows的OPENFILENAME结构&#xff0c;提供对基本文件对话框参数的访问权限。使用CFileDialog对象首先要使用构造参数创建该对象&…

HCIA笔记

目录 一&#xff0c;OIS七层模型 二&#xff0c;拓扑类型 三&#xff0c;节点增加设备----HUB集线器 四&#xff0c;网桥——交换机——工作在介质访问控制层&#xff08;单位&#xff1a;BP-S&#xff09; 五&#xff0c;路由器原理 六&#xff0c;封装与解封装 七&…

【传知代码】图像处理解决种子计数方法

文章目录 一、背景及意义介绍研究背景农业考种需求传统计数方法的局限性人工计数仪器设备计数 研究意义提高育种效率提高计数准确性广泛的适用性数据存档与分析便利 二、概述三、材料与数据准备以及方法介绍整体流程图像采集图像预处理形态学操作腐蚀运算开运算 图像二值化种子…

[RoarCTF 2019]Easy Calc 1

[RoarCTF 2019]Easy Calc 1 审题 题目就是一个计算器。 看到源代码有 calc.php 进入看到waf的源代码 知识点 RCE 解题 审核代码 <?php error_reporting(0); if(!isset($_GET[num])){show_source(__FILE__); }else{$str $_GET[num];$blacklist [ , \t, \r, \n,\, &q…