【发布时间】:2010-10-17 10:04:27
【问题描述】:
一旦 PriorityQueue 中对象的优先级发生变化,Java 是否有一种简单的方法来重新评估堆?我在Javadoc 中找不到任何迹象,但必须有办法以某种方式做到这一点,对吧?我目前正在删除对象然后重新添加它,但这显然比在堆上运行更新要慢。
【问题讨论】:
-
我很好奇会得到什么样的答案;我以前遇到过这种情况,似乎没有一个简单的答案。我怀疑你能比 O(log n) 做得更好。 remove(Object) 方法是您当前方法的瓶颈,它在时间上是线性的。
-
我通常只是添加新项目,不删除这很慢。为了使代码正确,我保留了一个单独的数组或映射,其中包含应该删除的元素,因此当它们出现时,我可以忽略它们。
标签: java heap priority-queue