Java中的优先级队列

时间:2009-07-07 11:36:59

标签: java priority-queue

java.util.PriorityQueue允许在施工时传递Comparator。插入元素时,会根据比较器指定的优先级对它们进行排序。

元素插入后优先级发生变化时会发生什么? PriorityQueue何时重新排序元素?是否可以轮询实际上没有最低优先级的元素?

是否有优先级队列的良好实现,允许有效的优先级更新?

2 个答案:

答案 0 :(得分:13)

您应该删除元素,更改元素并重新插入,因为在插入时会发生排序。虽然它涉及几个步骤,但有效可能已经足够好了。 (我刚注意到关于删除的评论为O(n)。)

一个问题是,当你删除元素时它也会重新排序,如果你稍后再重新插入它,这是多余的。如果从头开始实现自己的优先级队列,则可以使用update()跳过此步骤,但扩展Java的类将无法工作,因为您仍然只能使用base提供的remove()和add()。 / p>

答案 1 :(得分:6)

我希望期望 PriorityQueue不重新排序 - 如果它尝试进行二元搜索以找到放置任何新条目的正确位置,它可能会非常困惑。 / p>

一般来说,我希望将队列中已有内容的优先级更改为一个坏主意,就像更改构成哈希表中键的值一样。