for (Event e : pq)
不按优先级顺序迭代。
while(!pq.isEmpty()){
Event e = pq.poll();
}
这有效但清空了队列。
你不能遍历一个Priority Queue
由于底层实现的原因(我认为它是Java中的最小堆),因此按该顺序排列。
这不是一个排序数组,这样您就可以从一个元素转到优先级较低的元素。
Peeking(读取堆中的顶部元素堆)是常数时间O(1)
因为它着眼于最小的元素。
为了得到第二个下一个你must将最小的顶部元素出队,这就是它的工作原理。
出队(重新堆化 =O(log n)
time) 不仅仅是取出该元素的问题,底层结构会自行重新排列,以便首先取出优先级最低的元素。
此外,要遍历整个优先级队列以按排序顺序读取所有项目,它是一个O(n log(n))
手术。
因此,您也可以只获取队列中的所有元素并对它们进行排序(也可以O(n log (n))
)然后你就可以按照你的意愿浏览它们。唯一的缺点是您持有队列的额外副本。
尽管如此,如果您需要以这种方式遍历数据,优先级队列可能不是满足您需求的正确数据结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)