首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PriorityQueue上迭代?

如何在PriorityQueue上迭代?
EN

Stack Overflow用户
提问于 2011-11-15 06:29:33
回答 8查看 73K关注 0票数 38
for (Event e : pq)

不按优先级顺序迭代。

while(!pq.isEmpty()){
  Event e = pq.poll();
}

这是可行的,但是清空了队列。

EN

回答 8

Stack Overflow用户

发布于 2011-11-15 06:36:55

基于堆的优先级队列只保证第一个元素是最高/最低的。没有廉价(即O(n))的方法来获得排序形式的元素。

如果您需要经常这样做,请考虑使用以排序形式维护元素的结构。例如,使用java.util.TreeSet,并使用pollFirst()pollLast()代替peek() / poll()

票数 12
EN

Stack Overflow用户

发布于 2018-06-03 07:03:04

之前的帖子说了所有的事情,但没有人给出完整的工作示例(除了复制pq),所以这里是:

Event[] events = pq.toArray(new Event[pq.size()]);
Arrays.sort(events, pq.comparator());
for (Event e : events) {
    System.out.println(e);
}
票数 5
EN

Stack Overflow用户

发布于 2016-12-28 01:53:28

您可以在循环中复制队列和轮询,在此示例中,pq是原始优先级队列:

PriorityQueue<Your_class> pqCopy = new PriorityQueue<Your_class>(pq);
while(!pqCopy.isEmpty()){
    Your_Class obj = pqCopy.poll();
    // obj is the next ordered item in the queue
    .....
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8129122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档