java优先队列

  1. 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:3、3、5、56

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.堆总是一棵完全二叉树。

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


欢迎转载,欢迎错误指正与技术交流,欢迎交友谈心

文章标题:java优先队列

文章字数:318

本文作者:Brain Cao

发布时间:2018-12-16, 15:54:20

最后更新:2020-03-07, 13:42:45

原始链接:https://braincao.cn/2018/12/16/java-priority-queue/

版权声明:本文为博主原创文章,遵循 BY-NC-SA 4.0 版权协议,转载请保留原文链接与作者。

目录
×

喜欢请收藏,疼爱就打赏