优先级队列(Java)

1.优先级队列

1.1基本概念

优先级队列也是一个队列,但是不是单纯的先进先出,而是把优先级最高的先出去。(优先级队列内部的结构就是堆。)

1.2常用的接口介绍

1.2.1PriorityQueue的特性

Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,下面是PriorityQueue的使用注意事项
1)使用优先级队列必须导入PriorityQueue所在的包

import java.util.PriorityQueue

2)PriorityQueue中放置的元素必须能够比较大小,不能插入无法比较大小的对象,否则会抛出ClassCastException异常。
3)不能插入null对象,否则会抛出空指针异常
4)没有容量限制,可以插入任意多个元素,其内部可以自动扩容;
5)PriorityQueue底层使用了推数据结构。

1.2.2PriorityQueue的常用接口介绍

插入/删除/获取优先级最高的元素

函数名功能介绍
boolean offer(E e)插入元素e,插入成功后返回true (空间不够时可以扩容)
E peek()获取优先级最高的元素,如果优先级队列为空,返回null
E poll()移除优先级最高的元素并返回,如果优先级为空,则返回null
int size()获取有效元素个数
void clear()清空
boolean isEmpty()检测优先级队列是否为空,空返回为true
public class Test {
    public static void main(String[] args) {
        PriorityQueue<Integer> queue=new PriorityQueue<>();
        int [] arr={9,7,6,4,8,3,5};
        for(int x:arr){
            queue.offer(x);
        }
        while(!queue.isEmpty()){
            int pos=queue.poll();
            System.out.println(pos);
        }
    }
}

1.3优先级队列的应用

1)用来排序(堆排序)
2)用来解决topk问题(提取前K个元素)

2.优先级队列的模拟实现

2.1堆的概念

小堆(大堆)根结点最大的堆叫做最大堆(大根堆),根节点最小的堆叫做小堆(小根堆)。
堆的性质:
1)堆中的某个结点的值总是不大于(不小于)其父结点的值;
2)堆总是一个完全二叉树。
在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值