无论怎么初始化,优先队列的长度不是固定的,你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; });
原文地址:https://www.cnblogs.com/weizhibin1996/p/9277662.html
时间: 2024-10-21 15:33:11