更新 Java PriorityQueue 中的优先级
当使用带有 Comparator 的 PriorityQueue 进行对象排序时,对象的类变量的后续更改(基于计算哪个优先级)提出了挑战。
传统上,一个简单的解决方案包括删除对象,更新其值,然后重新插入它,触发优先级队列的比较器。但是,是否有更有效的替代方法来围绕 PriorityQueue 创建包装类?
答案
不幸的是,删除和重新插入仍然是最有效的方法。 PriorityQueue 在插入时本质上将新元素插入到适当的位置,从而优化队列性能。在出队操作期间搜索最高优先级的元素会显着影响性能。
TreeMap 和 HashMap 都存在此限制(如果元素哈希码更改,则会失败)。
创建包装类可能涉及将比较代码从入队移动到出队,从而无需在入队期间进行排序。然而,这种方法会损害性能并且需要在优先级更新时进行同步。由于无论哪种方式都需要同步,因此出队和重新入队提供了更简单且性能更高的解决方案。
以上是## 您可以在不删除并重新插入的情况下更新 Java PriorityQueue 中的优先级吗?的详细内容。更多信息请关注PHP中文网其他相关文章!