PriorityQueue优先队列使用的注意事项

news2025/1/23 10:25:56

PriorityQueue只保证队列的头和尾是指定序列的两个端点值,不是给它的元素排序了

所以在使用的时候直接打印 PriorityQueue ,或者用 增强for 遍历出来的数据都不是有序的。正确的遍历方式如下:

// 按照排序顺序输出 PriorityQueue 中的元素
while (!priorityQueue.isEmpty()) {
     System.out.println(priorityQueue.poll());
}

修改PriorityQueue元素的方法

PriorityQueue并不直接提供修改元素的方法。但是,我们可以通过一个额外的操作来实现修改的功能,即先删除指定元素,然后将修改后的元素再次添加到队列中。PriorityQueue在插入、删除元素的时候会重新维护顶堆。

public static void main(String[] args) {
        PriorityQueue<Student> priorityQueue = new PriorityQueue<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.age-o2.age;
            }
        });
        Student student1 = new Student("小明", 6), student2 = new Student("小费", 3), student3 = new Student("小白", 2);
        priorityQueue.add(student1);
        priorityQueue.add(student2);
        priorityQueue.add(student3);
//        Iterator<Student> iter = priorityQueue.iterator();
//        while (iter.hasNext()) {
//            if (iter.next().name.equals("小明")) {
//                iter.remove();
//                priorityQueue.add(new Student("小王", 0));
//                break;
//            }
//        }
        priorityQueue.remove(student1);
        priorityQueue.add(new Student("小王", 0));
        // 按照排序顺序输出 PriorityQueue 中的元素
        while (!priorityQueue.isEmpty()) {
            System.out.println(priorityQueue.poll());
        }
    }

但是千万不能直接通过引用修改对象的属性,PriorityQueue不会自动重新排序元素

如下:

输出也不是根据从小到大输出的

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

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

相关文章

unet脑肿瘤分割完整代码

U-net脑肿瘤分割完整代码 代码目录数据集网络训练测试 代码目录 数据集 https://www.kaggle.com/datasets/mateuszbuda/lgg-mri-segmentation dataset.py 在这里插入代码片import os import numpy as np import glob from PIL import Image import cv2 import torchvision fr…

详谈Python的开发工具

Python作为一种流行的编程语言&#xff0c;在开发过程中需要使用各种工具来提高效率、简化工作流程和改善开发体验。在本文中&#xff0c;我们将介绍一些常用的Python开发工具&#xff0c;包括文本编辑器、集成开发环境&#xff08;IDE&#xff09;、虚拟环境管理工具、包管理器…

MCU最小系统原理图中四个问题详解——芯片中有很多电源管脚的原因(VDD/VSS/VBAT)、LC滤波、两级滤波、NC可切换元件

前言&#xff1a;本文对MCU最小系统原理图中的四个问题进行详解&#xff1a;芯片中有很多电源管脚的原因&#xff08;VDD/VSS/VBAT&#xff09;、LC滤波、两级滤波、NC可切换元件。本文以GD32F103C8T6最小系统原理图举例 目录&#xff1a; 芯片中有很多电源管脚的原因&#x…

svn spring项目增量打包工具

svn spring项目增量打包工具 前提介绍 项目使用svn &#xff0c;打包方式为war包&#xff0c;开发工具ide 项目有时候更新功能只需要更新部分class和html文件&#xff0c;但是要每个都打包并不是很简单 听说idea有现成的插件可以实现这个功能&#xff0c;但是我没找到&…

Java内容

目录 1.命名规范 1.命名规范 2.变量

PiflowX如何快速开发flink程序

PiflowX如何快速开发flink程序 参考资料 Flink最锋利的武器&#xff1a;Flink SQL入门和实战 | 附完整实现代码-腾讯云开发者社区-腾讯云 (tencent.com) Flink SQL 背景 Flink SQL 是 Flink 实时计算为简化计算模型&#xff0c;降低用户使用实时计算门槛而设计的一套符合标…

GPT5会是什么样的?奥特曼在YC W24会上演讲要点

“YC启动活动上&#xff0c;Sam Altman表示&#xff1a;以GPT-5和AGI将在’相对不久的将来’实现的心态来构建。” 在Y Combinator的一个启动活动中&#xff0c;Sam Altman表示&#xff0c;人工通用智能&#xff08;AGI&#xff09;的发展即将到来&#xff0c;并建议在构建产品…

【Fiddler抓包】微信扫码访问链接打不开网页

又来每天进步一点点~~~ 背景&#xff1a;某天发版的时候&#xff0c;手机连接电脑抓包查看用户登录之前的sessionID&#xff0c;由于业务需要&#xff0c;是需要用户登录微信扫码跳转至某一页面的&#xff0c;微信&#xff08;分身&#xff09;扫码成功&#xff0c;跳转时打不…

dcm数据格式转nrrd数据格式(2维转3维)

目的 将dcm数据格式&#xff08;2D&#xff09;转成nrrd数据格式&#xff08;3D&#xff09; 将一个文件夹下的dcm数据转成一个nrrd数据 代码 1. 安装必要包 pip install SimpleITK2. 上代码 Descripttion: Result: Author: Philo Date: 2024-01-10 14:25:49 LastEditors: …

WorkPlus企业打破信息孤岛,构建统一工作平台的首选之一

在当今数字化时代&#xff0c;企业内部存在着繁多的工作应用和系统。要实现高效的工作协作&#xff0c;企业需要一个统一的工作平台来打破信息孤岛&#xff0c;提升协作效率。作为一家领先的企业统一工作平台&#xff0c;WorkPlus以其卓越的性能和专业的功能&#xff0c;助力企…

【算法】Java-二叉树的右视图(BFS、DFS两种解法)

题目要求&#xff1a; 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入…

python基础-base64编码理解

目录 1、base64是什么 2、base64有什么用 3、base64如何用 4、理解base64 5、扩展 1、base64是什么 base64 就是包括字母a-z,A-Z,数字0-9&#xff0c;符号“”&#xff0c;“/”一共64个字符的字符集&#xff1b;还有一个‘’ 字符&#xff0c;占位补充&#xff1b; …

WorkPlus助力企业高效协作的企业级内网即时通讯解决方案

在企业内部&#xff0c;高效沟通和协作是推动工作顺利进行的关键。而企业级内网即时通讯成为了提升内部沟通效率的重要工具。作为一家领先的企业级内网即时通讯解决方案&#xff0c;WorkPlus以其卓越的性能和高安全性&#xff0c;打造了高效沟通协作的新标杆。 为什么选择WorkP…

嘘……快进来!这儿有最新版Microsoft照片程序的安装秘籍!(附安装引导程序下载)

网管小贾 / sysadm.cc 最近啊有不少小伙伴向我反馈&#xff0c;自个的 Windows 10 系统里边居然没有 Microsoft 照片 程序。 我觉得有点不可思议&#xff0c;为啥呢&#xff0c;因为他们的电脑是新买的&#xff01; 你看哈&#xff0c;系统是 22H2 最新版&#xff0c;安装日期…

陀螺仪LSM6DSV16X与AI集成(6)----检测自由落体

陀螺仪LSM6DSV16X与AI集成.6--检测自由落体 概述视频教学样品申请源码下载生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置 概述 本文介绍如何初始化传感器并配置其参数&#xff0c;以便在检测到自由落体事件时发送通知。 最近…

STM32H5 Nucleo-144 board开箱

文章目录 开发板资料下载 【目标】 点亮LD1&#xff08;绿&#xff09;、LD2&#xff08;黄&#xff09;和LD3&#xff08;红&#xff09;三个LED灯 【开箱过程】 博主使用的是STM32CubeMX配置生成代码&#xff0c;具体操作如下&#xff1a; 打开STM32CubeMX&#xff0c;File-…

620基于51单片机的密码锁设计[Proteus仿真]

620基于51单片机的密码锁设计[proteus仿真] 密码锁设计这个题目算是课 程设计和毕业设计中常见的题目了&#xff0c;本期是一个基于51单片机的密码锁设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】&#xff0c;赞赏任意文章 2&#xffe5;&#xff0c;私信…

第 11 章 树结构实际应用

文章目录 11.1 堆排序11.1.1 堆排序基本介绍11.1.2 堆排序基本思想11.1.3 堆排序步骤图解说明11.1.4 堆排序代码实现 11.2 赫夫曼树11.2.1 基本介绍11.2.2 赫夫曼树几个重要概念和举例说明11.2.3 赫夫曼树创建思路图解11.2.4 赫夫曼树的代码实现 11.3 赫夫曼编码11.3.1 基本介绍…

关于java类与对象的创建

关于java类与对象的创建 我们在前面的文章中回顾了方法的定义和方法的调用&#xff0c;以及了解了面向对象的初步认识&#xff0c;我们本篇文章来了解一下类和对象的关系&#xff0c;还是遵循结合现实的方式去理解&#xff0c;不是死记硬背&#x1f600;。 1、类 类是一种抽…

第 3 场 蓝桥杯小白入门赛 解题报告 | 珂学家 | 单调队列优化的DP + 三指针滑窗

前言 整体评价 T5, T6有点意思&#xff0c;这场小白入门场&#xff0c;好像没真正意义上的签到&#xff0c;整体感觉是这样。 A. 召唤神坤 思路: 前后缀拆解 #include <iostream> #include <algorithm> #include <vector> using namespace std;int main()…