for (Event e : pq)
不按优先级顺序迭代。
while(!pq.isEmpty()){
Event e = pq.poll();
}
这是可行的,但是清空了队列。
发布于 2011-11-15 06:36:55
基于堆的优先级队列只保证第一个元素是最高/最低的。没有廉价(即O(n))的方法来获得排序形式的元素。
如果您需要经常这样做,请考虑使用以排序形式维护元素的结构。例如,使用java.util.TreeSet
,并使用pollFirst()
或pollLast()
代替peek()
/ poll()
发布于 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);
}
发布于 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
.....
}
https://stackoverflow.com/questions/8129122
复制相似问题