PriorityQueue主要方法(Java)

PriorityQueue优先队列

PriorityQueue 是 Java 中的一个基于优先级的队列,它可以实现最小堆或最大堆的功能。在 PriorityQueue 中,每个元素都有一个优先级,根据优先级可以决定出队顺序。

PriorityQueue 的实现基于堆,堆是一种完全二叉树,可以用数组来表示。对于最小堆,堆中每个节点的值都不大于其子节点的值;对于最大堆,堆中每个节点的值都不小于其子节点的值。

以下是 PriorityQueue 的主要方法:

  1. add(E e):向队列中添加元素 e
  2. offer(E e):向队列中添加元素 e,与 add 方法相同。
  3. remove():从队列中删除并返回头部元素,若队列为空则抛出异常。
  4. poll():从队列中删除并返回头部元素,若队列为空则返回 null
  5. element():获取但不删除头部元素,若队列为空则抛出异常。
  6. peek():获取但不删除头部元素,若队列为空则返回 null
  7. size():获取队列中元素数量。
  8. isEmpty():判断队列是否为空。

除此之外,PriorityQueue 还可以使用比较器来自定义元素间的优先级关系,例如:

PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>((a, b) -> a - b);

以上代码表示创建一个最小堆,其元素的优先级按照数值大小排序。

在实际应用中,PriorityQueue 常用于实现一些贪心算法、Dijkstra 算法等需要维护当前状态下最优解的场景。

代码示例:

import java.util.PriorityQueue;public class Main {public static void main(String[] args) {// 创建一个最小堆 PriorityQueuePriorityQueue<Integer> minHeap = new PriorityQueue<>();// 向队列中添加元素minHeap.add(3);minHeap.offer(1);minHeap.add(4);minHeap.offer(2);// 从队列中删除并返回头部元素int head1 = minHeap.remove();System.out.println("Removed element: " + head1);// 从队列中删除并返回头部元素int head2 = minHeap.poll();System.out.println("Polled element: " + head2);// 获取但不删除头部元素int head3 = minHeap.element();System.out.println("Element at head: " + head3);// 获取但不删除头部元素int head4 = minHeap.peek();System.out.println("Peeked element: " + head4);// 获取队列中元素数量int size = minHeap.size();System.out.println("Size of the queue: " + size);// 判断队列是否为空boolean isEmpty = minHeap.isEmpty();System.out.println("Is the queue empty? " + isEmpty);}
}

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

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

相关文章

JSDoc 真能取代 TypeScript?

这几个月&#xff0c;想必大家都听到过一个新闻&#xff1a; Svelte 弃用 TypeScript&#xff0c;改用 JSDoc 了。 TypeScript 我们知道&#xff0c;是用来给 JS 加上类型的&#xff0c;可以实现类型提示和编译时的类型检查。 那 JSDoc 能够完成一样的功能么&#xff1f;Svel…

图像处理常用算法—6个算子 !!

目录 前言 1、Sobel 算子 2、Isotropic Sobel 算子 3、Roberts 算子 4、Prewitt 算子 5、Laplacian算子 6、Canny算子 前言 同图像灰度不同&#xff0c;边界处一般会有明显的边缘&#xff0c;利用此特征可以分割图像。 需要说明的是&#xff1a;边缘和物体间的边界并不…

Android应用图标微技巧,8.0系统中应用图标的适配

大家好,2018年的第一篇文章到的稍微有点迟,也是因为在上一个Glide系列结束之后一直还没想到什么好的新题材。 现在已经进入了2018年,Android 8.0系统也逐渐开始普及起来了。三星今年推出的最新旗舰机Galaxy S9已经搭载了Android 8.0系统,紧接着小米、华为、OV等国产手机厂…

一句话总结Docker与K8S的关系

一句话总结&#xff1a;Docker只是容器的一种&#xff0c;它面向的是单体&#xff0c;K8S可以管理多种容器&#xff0c;它面向的是集群&#xff0c;Docker可以作为一种容器方案被K8S管理。下文继续具体介绍。 1、容器的核心概念 介绍这几个核心概念&#xff1a;OCI、CR、Runc、…

C语言指针运算

指针运算 指针加法意味着地址向上移动若干个目标指针减法意味着地址向下移动若干个目标示例&#xff1a; int a 100; int *p &a; // 指针 p 指向整型变量 aint *k1 p 2; // 向上移动 2 个目标&#xff08;2个int型数据&#xff09; int *k2 p - 3; // 向下移动 3 个…

springboot/ssm出租车管理系统车辆调度管理系统Java系统

springboot(ssm出租车管理系统 车辆调度管理系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&…

PWM输入输出

PWM&#xff08;Pulse Width Modulation&#xff09;即脉冲宽度调制&#xff0c;在具有惯性的系统中&#xff0c;可以通过对一系列脉冲的宽度进行制&#xff0c;来等效地获得所需要的模拟参量&#xff0c;常应用于电机控速、开关电源等领域。 PWM参数 PWM 中有三个重要参数&…

寒假作业-day7

1>现有文件test.c\test1.c\main.c , 请编写Makefile. 代码&#xff1a; CCgcc EXEstr OBJS$(patsubst %.c,%.o,$(wildcard *.c)) CFLAGS-c -oall:$(EXE)$(EXE):$(OBJS)$(CC) $^ -o $%.o:%.c$(CC) $(CFLAGS) $ $^head.o:head.hclean:rm $(OBJS) $(EXE) 2>C编程实现&…

封装sku组件

1. 准备模板渲染规格数据 使用Vite快速创建一个Vue项目&#xff0c;在项目中添加请求插件axios&#xff0c;然后新增一个SKU组件&#xff0c;在根组件中把它渲染出来&#xff0c;下面是规格内容的基础模板 <script setup> import { onMounted, ref } from vue import axi…

NOVATEK显示技术系列之CEDSCHPI Training差异简介

CEDS的数据封包格式&#xff1a;首先CEDS数据封包包括三个部分&#xff1a; Training Pattern即Phase1Control Data 即 Phase2RGB Data 即Phase3 Power on Timing&#xff1a; 工作原理&#xff1a; Power ON时&#xff0c;TCON会发Training Pattern&#xff0c;当COF接受Tr…

江科大STM32 终

目录 SPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件外设读写W25Q64 BKP备份寄存器、PER电源控制器、RTC实时时钟11.0 Unix时间戳代码示例&#xff1a;读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR电源控制12.1 PWR简介代码示例&#xff1a;修改主频12.3 串…

Linux挂载新的存储设备

1. 尝试mount ls /mnt/sdb mkdir /mnt/sdb mount /dev/sdb /mnt/sdb如果挂载失败, 提示只读之类的, 可能是因为这个磁盘并没有分区, 需要分区. 执行以下语句要注意, 是分区, 如果本身有数据的, 数据会丢失, 磁盘会被格式化 sudo mkfs.ext4 /dev/sdb2. 设置自动挂载 [roottb …

分享90个行业PPT,总有一款适合您

分享90个行业PPT&#xff0c;总有一款适合您 90个行业PPT下载链接&#xff1a;https://pan.baidu.com/s/1bHvhk_42-IFAjNdjPPtMZw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode)

题目描述 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 题目示例 输入&#xff1a;inorder [9,3,15,20,7], postorder [9,15,7,20,3] 输出&a…

LINUX系统备份管理

一、centos7系统备份与还原 1、使用tar命令备份 tar打包命令的特点&#xff1a; 保留权限 适合备份整个目录 可以选择不同的压缩方式 如果选择不压缩还能实现增量备份&#xff0c;部份还原&#xff0c;参考man tar 因为Linux类系统不像windows,它不会限制ROOT用户存取任…

Java高级-多线程

多线程 1.线程创建的方法1.1.方法一 继承Thread类1.2.方法二 实现Runnable接口1.3.方法三 实现Callable接口 2.线程安全2.0.线程不安全的案例2.1.方式一&#xff1a;同步代码块2.2.方式二&#xff1a;同步方法2.3.方式三&#xff1a;Lock锁 3.线程池3.1.创建线程池3.2.线程池处…

B2078 含 k 个 3 的数(洛谷)

题目描述 输入两个正整数 m 和 k&#xff0c;其中 1<m≤&#xff0c;1<k≤15 &#xff0c;判断 m 是否恰好含有 k 个 3&#xff0c;如果满足条件&#xff0c;则输出 YES&#xff0c;否则&#xff0c;输出 NO。 输入格式 输入一行&#xff0c;为两个整数 m,k&#xff0…

揭开Markdown的秘籍:标题|文字样式|列表

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Markdown指南、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️Markdown 标题二. ⛳️Markdown 文字样式2.1 &#x1f514;斜体2.2 &…

scss和less的区别

Sass(Scss)、Less 都是 CSS 预处理器&#xff0c;他们定义了一种新的语言&#xff0c;其基本思想是&#xff0c;用一种专门的编程语言为 CSS 增加了一些编程的特性&#xff0c;将 CSS 作为目标生成文件&#xff0c;然后开发者就只要使用这种语言进行 CSS 的编码工作。 为什么要…

快速幂计算 Power Calculus

题目 照搬的题解&#xff0c;重命名了变量 ; -) now >>(maxStep-step)的目的是让剩余步数都用来自*2&#xff0c;看看能不能够到n #include <iostream> using namespace std; int maxStep,n; int nums[50];/// brief 深度遍历查找可行路径&#xff0c;用的递归&…