Java优先队列一些问题
Posted 朋友圈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java优先队列一些问题相关的知识,希望对你有一定的参考价值。
无论怎么初始化,优先队列的长度不是固定的,你add一个,size就会++,满了就会扩容。
所以必须手动维护优先队列的大小,比如topK问题。
定义一个len,len<max的时候就直接add,len++
满了就poll之后,再add
将一堆无序的元素放进优先队列中,每次调用poll,都能获得当前小顶堆,也就是里面的最小值。
优先队列默认是小顶堆,可以自己传入排序方法。大顶堆就传相反的排序方法就好了。
//我定义的类 public static class Node{ int cap; int pro; public Node(int x,int y){ cap = x; pro = y; } } PriorityQueue<Node> priorityQueue = new PriorityQueue<>(new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { if(o1.pro>o2.pro) return -1; if(o1.pro<o2.pro) return 1; return 0; } });
lamda表达式也可以
不用new comxxxx这个类,直接传函数即可
参数类型不用填,会根据上下文给你填好
PriorityQueue<Node> priorityQueue = new PriorityQueue<>((o1,o2)->{ if(o1.pro>o2.pro) return -1; if(o1.pro<o2.pro) return 1; return 0; });
以上是关于Java优先队列一些问题的主要内容,如果未能解决你的问题,请参考以下文章
基于PriorityQueue(优先队列)解决TOP-K问题