java优先队列


title: java优先队列
date: 2018-12-16 15:54:20
updated: 2020-03-07 13:39:312020-03-07 13:42:15
categories: java
tags:
- java


此文档为java优先队列的学习总结

java中优先队列和堆的详细使用

来源:java中优先队列和堆的详细使用

优先队列实现 大小根堆 解决top k 问题

我们知道优先队列其实内部实现就是一个堆的数据结构,java默认的是一个小跟堆,每次取出最小的元素,因为堆的性质他可以做到O(logn)级别的插入和删除操作。

demo_小根堆:

Queue<Integer> queue = new PriorityQueue<>();//优先队列,内部实现就是一个小根堆
queue.add(5);
queue.add(3);
queue.add(3);
queue.add(56);
while(!queue.isEmpty())
{
    System.out.println(queue.poll());///维护一个堆保证每次取出的都是最小的并出堆
}
out:33556
    
demo_大根堆:

int initialCapacity = 5;//定义一个长度为5的优先队列(且是大根堆)
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(initialCapacity, new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }
});

我们知道堆的性质是有:

1.堆中某个结点的值总是不大于(或不小于)其父结点的值;

2.堆总是一棵完全二叉树。

将根结点最大的堆叫做大根堆,根结点最小的堆叫做小根堆。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值