PriorityQueue类

news/2024/7/24 11:14:22 标签: 开发语言, java

PriorityQueue类

Java中的PriorityQueue是一个基于优先级堆的无界优先级队列。它是一个队列,可以按照元素的优先级顺序对元素进行排序,并且允许快速访问具有最高优先级的元素。它实现了Queue接口,继承了AbstractQueue类。

主要函数和方法:

  1. 构造函数:

    java">PriorityQueue() // 创建一个初始容量为11的优先级队列,默认自然顺序排序
    PriorityQueue(int initialCapacity) // 创建具有指定初始容量的优先级队列,默认自然顺序排序
    PriorityQueue(Collection<? extends E> c) // 创建包含指定集合元素的优先级队列,默认自然顺序排序
    PriorityQueue(int initialCapacity, Comparator<? super E> comparator) // 创建具有指定初始容量和比较器的优先级队列
    
  2. 核心方法:

    • add(E e)offer(E e):将指定的元素插入队列。
    • peek():返回队列的头部(最高优先级元素),如果队列为空,则返回 null
    • poll():移除并返回队列的头部(最高优先级元素),如果队列为空,则返回 null
    • remove(Object o):从队列中移除指定的元素,如果存在的话。
    • clear():移除队列中的所有元素。
    • size():返回队列中的元素数量。
    • isEmpty():检查队列是否为空。
    • iterator():返回一个迭代器,可以按照元素的顺序遍历队列。

使用示例:

  1. 使用默认自然排序:

    java">PriorityQueue<Integer> pq = new PriorityQueue<>();
    pq.offer(5);
    pq.offer(2);
    pq.offer(8);
    pq.offer(1);
    
    // 遍历队列并按优先级顺序访问元素
    while (!pq.isEmpty()) {
        System.out.println(pq.poll());
    }
    
  2. 使用自定义比较器排序:

    java">// 自定义一个比较器,以字符串长度作为优先级排序
    Comparator<String> lengthComparator = Comparator.comparingInt(String::length);
    PriorityQueue<String> pq = new PriorityQueue<>(lengthComparator);
    
    pq.offer("apple");
    pq.offer("banana");
    pq.offer("orange");
    pq.offer("kiwi");
    
    // 遍历队列并按长度顺序访问元素
    while (!pq.isEmpty()) {
        System.out.println(pq.poll());
    }
    

PriorityQueue 可以用于实现任务调度、事件处理等场景,能够方便地处理具有优先级的元素集合。在使用过程中需要注意比较器的实现,确保元素能够按照预期的优先级排序。

Comparator.comparingInt(String::length) 创建了一个比较器,根据字符串的长度进行比较。这个比较器是按照长度来确定优先级的,所以较长的字符串会被认为是“更大”的(更高优先级),排在前面。

这是因为在标准的升序排序中,较大的元素(在这种情况下是指长度更长的字符串)会排在较小的元素前面。这符合通常的自然排序规则。所以,当你使用Comparator.comparingInt(String::length)创建的比较器时,它将会把字符串长度较长的排在前面。

如果你想要反转这种顺序,即短的字符串优先级高,你可以使用 reversed() 方法来反转比较器的顺序。例如:

java">Comparator<String> lengthComparator = Comparator.comparingInt(String::length).reversed();

通过调用 reversed() 方法,你可以修改比较器的排序顺序,使较短的字符串排在前面,从而改变优先级的顺序。


http://www.niftyadmin.cn/n/5234409.html

相关文章

蓝桥杯第1037题子串分值和 C++ 字符串 逆向思维 巧解

题目 思路和解题方法 方案一——遍历哈希表 仅能过60%样例,大多数同学都用的该方法&#xff0c;就不过多赘述 #include <iostream> #include <unordered_map> using namespace std; int main() {string s;cin >> s;int n s.size();int res n;for (int i 0…

QT学习_16_制作软件安装包

1、准备软件exe及其运行环境 参考&#xff1a;Qt学习_12_一键生成安装包_江湖上都叫我秋博的博客-CSDN博客 这篇博客记录了&#xff0c;如何用window的脚本&#xff0c;一键生成一个可以免安装的软件压缩包&#xff0c;解压缩后&#xff0c;点击exe文件就可以直接运行。 这一…

leetcode:225. 用队列实现栈

一、题目 链接&#xff1a;225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a; typedef struct { } MyStack; MyStack* myStackCreate() void myStackPush(MyStack* obj, int x) int myStackPop(MyStack* obj) int myStackTop(MyStack* obj) …

鸿蒙(HarmonyOS)HelloWo入门

1.HarmonyOS简单介绍 1. HarmonyOS特征&#xff1a;一开发发&#xff0c;多端部署&#xff0c;可分可合&#xff0c;自由流转2. HarmonyOS使用的语言&#xff1a;是ArkTs,ArkTs是在TypeScript(简称TS)基础上扩展的&#xff0c;而TS又是在JavaScript(简称JS)的超集、UI框架ArkUI…

【高效开发工具系列】jackson入门使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

php时间和centos时间不一致

PHP 时间和 CentOS 操作系统时间不一致的问题通常是由于时区设置不同造成的。解决这个问题可以通过以下几个步骤&#xff1a; 检查 CentOS 系统时间&#xff1a; 你可以通过在终端运行命令 date 来查看当前的系统时间和时区。 配置 CentOS 的时区&#xff1a; 如果系统时间不正…

【PTA-C语言】实验三-循环结构I

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 实验三-循环结构I 7-1 求交错序列前N项和 &#xff08;分数 15&#xff09;7-2 寻找250&#xff08;分数 15&#xff09;7-3 最大公约数和最小公倍数&#xff08;分数 15&#xff09;7-4 统计字符&#xff0…

基础Python教程之读写sqlite

前言 SQLite 是一种嵌入式数据库管理系统&#xff0c;它是一个自包含、零配置的、服务器无关的数据库引擎。它的设计目标是提供一个轻量级的、高效的数据库解决方案&#xff0c;适用于嵌入式系统、移动设备和简单的应用程序。 Python 是一种高级编程语言&#xff0c;其强大的标…