优先队列(Java)

概念

优先队列(priority queue)中的元素可以按照任意顺序插入,但会按照有序的顺序检索。不过优先队列并没有对所有元素进行排序,所以迭代处理这些元素,并不需要对它们进行排序。优先队列里面的结构是堆---一个自组织的二叉树,其添加(add)和删除(remove)操作可以让最小元素移动到跟,而不必花时间对元素进行排序

应用场景

任务调度;每一个任务都有一个优先级,任务以随机顺序添加到队列中。每当启动一个新的任务时,都会将优先级最高的任务从队列中删除。

api

java.uti.PriorityQueue

java 复制代码
/**
 * 使用默认初始容量(11)创建一个{@code PriorityQueue},根据元素的{@linkplain Comparable 自然顺序}对其进行排序。
 */
public PriorityQueue() {
    this(DEFAULT_INITIAL_CAPACITY, null);
}

/**
 * 使用指定的初始容量创建一个{@code PriorityQueue},根据元素的{@linkplain Comparable 自然顺序}对其进行排序。
 *
 * @param initialCapacity 该优先队列的初始容量
 * @throws IllegalArgumentException 如果{@code initialCapacity}小于1
 */
public PriorityQueue(int initialCapacity) {
    this(initialCapacity, null);
}

/**
 * 使用默认初始容量创建一个{@code PriorityQueue},其中的元素根据指定的比较器进行排序。
 *
 * @param comparator 将用于对此优先队列进行排序的比较器。如果为{@code null},将使用元素的{@linkplain Comparable 自然顺序}。
 * @since 1.8
 */
public PriorityQueue(Comparator<? super E> comparator) {
    this(DEFAULT_INITIAL_CAPACITY, comparator);
}

具体调用比较器比较:

PriorityQueue<pair> pq = new PriorityQueue<>(Comparator.comparingInt(p->p.first));

相关推荐
IT_陈寒17 分钟前
Redis深度优化:10个让你的QPS提升50%的关键配置解析
前端·人工智能·后端
烤麻辣烫25 分钟前
黑马程序员苍穹外卖(新手) DAY3
java·开发语言·spring boot·学习·intellij-idea
妮妮喔妮30 分钟前
JAVA反射的介绍(优缺点)
java·开发语言
i***486135 分钟前
Redis重大版本整理(Redis2.6-Redis7.0)
java·数据库·redis
武子康39 分钟前
大数据-157 Apache Kylin 全面指南:MOLAP 架构、Hive/Kafka 实战与实时 OLAP 落地
大数据·后端·apache kylin
YQ_ZJH43 分钟前
Redisson 看门狗机制详解
java·redis
ssshooter43 分钟前
传参优于外部变量
前端·后端·面试
那我掉的头发算什么1 小时前
【javaEE】多线程——线程安全进阶☆☆☆
java·jvm·安全·java-ee·intellij-idea
qq_22589174661 小时前
基于Python+Django餐饮评论大数据分析与智能推荐系统 毕业论文
开发语言·后端·python·信息可视化·数据分析·django
悟空CRM服务1 小时前
我用一条命令部署了完整CRM系统!
java·人工智能·开源·开源软件