Java中的PriorityQueue优先级队列

以前的博客中介绍过队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,此时出队列时需要优先级高的元素先出队列,这个时候传统的队列显然不能胜任,Java中有一个新的实现类继承了Queue接口,这个类实现了上述优先级队列——PriorityQueue。
PriorityQueue是怎么知道队列中哪个元素优先哪个元素不优先的呢?Java中的Comparable和Comparator到底该怎么用看完就全明白了大家可以看一下我这篇文章(不看不影响,看理解的更深刻)有两个路子:

  1. 队列中对象的实现类必须实现Comparable接口,重写了comparaTo()方法,PriorityQueue会根据ComparaTo()的返回值来找到优先级高的元素并把它放在队首。
  2. 专门为队列中元素写一个实现了Comparator接口的比较器,在创建优先级队列的时候把比较器对象作为参数传进去: 在这里插入图片描述

想具体了解Comparable和Comparator还请看上面那篇博客,这篇博客主要介绍PriorityQueue,总之优先级队列想要得到优先级高的元素就必须要对队列中的元素进行比较,可问题比较依据是什么?这个问题上面两个路子就给解决了,PriorityQueue会好了,聊到现在PriorityQueue可以选出队列中优先级高的元素了。

PriorityQueue的常用构造方法:
在这里插入图片描述在这里插入图片描述
PriorityQueue常用方法:
在这里插入图片描述

在这里插入图片描述
下面具体通过Integer(它实现了Comparable,所以有比较能力,PriorityQueue能选出优先级高的元素)演示一下:

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new PriorityQueue<>();

        //入队列
        queue.add(1);
        queue.add(999);
        queue.add(45);
        queue.add(3);
        queue.add(66);

        //看看队首元素
        System.out.println("对首元素" + queue.element());
        //出队列
        queue.remove();
        //看看对首元素、
        System.out.println("对首元素" + queue.element());
        //查看队列是否为空
        System.out.println(queue.isEmpty());
        //输出当前队列大小
        System.out.println(queue.size());
    }
}

运行结果:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有裂痕的石头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值