java中的优先队列PriorityQueue使用详解

虽然称PriorityQueue为队列,但是其实它和队列关系并没有太大,称它为小顶堆更合适。因为其中的数据都会按完全二叉树进行小顶堆构造,当插入新数据的时候会自动将数据插入到合适的位置来保证是一个小顶堆。
注意,队列中的数据不一定有序,但是每次弹出来的一定是最小(最大)的值。
它的常用方法如下:

  1. add:插入队尾元素,不成功会抛出异常
  2. offer:插入队尾元素,不能被立即执行的情况下会返回true 或 false
  3. remove:删除队头元素,如果不成功会返回false。
  4. remove(Object o):删除其中一个元素o,如果o有多个则只删除一个。
  5. poll:删除队头元素,并返回删除的元素
  6. peek:查询队顶元素
  7. indexOf(Object o):查询对象o的索引
  8. contain(Object o):判断是否容纳了元素

如果要修改它默认的升序方法可以在构造时用比较器。
以上参考代码如下

import java.util.Comparator;
import java.util.PriorityQueue;

class test {
    public static void main(String[] args){
        PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;  // 从大到小排序
            }
        });
        pq.add(2);
        pq.add(2);
        pq.add(5);
        pq.add(6);
        pq.add(3);
        if (pq.contains(2)){
            System.out.println("yes");
        }
        pq.offer(4);
        pq.remove(2);
        pq.remove(5);
        System.out.println(pq.poll());
        System.out.println(pq.poll());
        System.out.println(pq.poll());
        System.out.println("end");
    }
}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值