PriorityQueue,我错过了啥?
Posted
技术标签:
【中文标题】PriorityQueue,我错过了啥?【英文标题】:PriorityQueue, what am I missing?PriorityQueue,我错过了什么? 【发布时间】:2013-07-09 21:37:07 【问题描述】:我有一个比较器类 NComparator,它比较 2 个 Node 对象并返回 1、-1 或 0。
我初始化了一个初始容量为 100 的 PriorityQueue 和 NComparator。
NComparator nc = new NComparator();
PriorityQueue<Node> pq = new PriorityQueue<Node>(100, nc);
我有大约 25 个 Node 对象(可以与 NComparator 进行比较),我将它们全部添加到 PriorityQueue 对象中:
pq.add(new Node("A", 3));
pq.add(new Node("G", 1));
pq.add(new Node("B", 10));
.... etc
如何通过比较器返回的优先级(仅比较节点的成对组合)在 PriorityQueue 中排列这些节点对象?具体来说,我希望能够访问此 PriorityQueue 中优先级最低的两个节点。我该怎么做?
【问题讨论】:
这将有助于***.com/questions/11003155/… 【参考方案1】:PriorityQueue
API 仅支持获取优先级最低的单个节点,但您可以将其删除,然后再次查询以获取下一个最低元素。
【讨论】:
谢谢,我明白了。我也没有意识到当我执行 pq.add 时,PriorityQueue 会自动添加它们,因此它们总是按顺序保留。所以删除元素将删除其最低优先级。【参考方案2】:如果您确定您的 NComparator 正确排列了 Node 元素,并且优先级最低的是在队列的头部,那么您只需要这样做,两次:pq.poll()
See the PriorityQueue API
例子:
Node firstLowerNode = pq.poll();
Node secondLowerNode = pq.poll();
【讨论】:
以上是关于PriorityQueue,我错过了啥?的主要内容,如果未能解决你的问题,请参考以下文章