Java优先级队列(概念+例题)

本文介绍了Java中的优先级队列,这是一种基于优先级堆的数据结构,元素排序遵循自然排序或自定义比较器。文章讲解了队列的基本概念,包括JDK自带的实现、自定义比较器实现降序排列,并提供了相关例题和使用注意事项,如非线程安全、动态扩容等。建议在需要有序遍历时使用Arrays.sort转换数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念:

优先级队列的Java实现是一种特殊的队列,其中元素的排序由其自然排序原则确定(默认最小堆),也可以根据创建期间提供的Comparator进行定制。我们在构造过程中调用的构造函数决定要与优先级队列一起使用的排序原则。与不允许使用null元素的Queue <E>不同,但是某些实现(例如LinkedList)也不禁止插入null元素。但是,PriorityQueue <E>根本不允许空元素。如果优先级队列是根据自然顺序构造的,则任何不可比较的元素插入都将引发ClassCastException。

它被声明为无限制的并且基于优先级堆。尽管队列的大小被称为无限制,但内部具有确定阵列大小的能力。插入元素时,此大小会自动增长。但是,没有详细说明增大尺寸的原理。

JDK自带的优先级队列代码实现

​//基于最小堆实现
 PriorityQueue<Integer>queue=new PriorityQueue<>();
        int []arr={5,4,3,2,1};
        for(int i:arr)
        {
            queue.offer(i);
        }
        for(int i:arr)
        {
            System.out.print(queue.poll());
        }
//输出结果:1,2,3,4,5

​

自定义比较器,实现降序排列

//基于最大堆实现
 PriorityQueue<Integer>queue=new PriorityQueue<>(new Comparator<Integer>() {
            @Overr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值