java优先队列
此文档为java优先队列的学习总结
java中优先队列和堆的详细使用
我们知道优先队列其实内部实现就是一个堆的数据结构,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 版权协议,转载请保留原文链接与作者。