首页  >  文章  >  Java  >  ## 您可以在不删除并重新插入的情况下更新 Java PriorityQueue 中的优先级吗?

## 您可以在不删除并重新插入的情况下更新 Java PriorityQueue 中的优先级吗?

Barbara Streisand
Barbara Streisand原创
2024-10-25 08:05:02222浏览

## Can You Update Priorities in a Java PriorityQueue Without Removing and Re-Inserting?

更新 Java PriorityQueue 中的优先级

当使用带有 Comparator 的 PriorityQueue 进行对象排序时,对象的类变量的后续更改(基于计算哪个优先级)提出了挑战。

传统上,一个简单的解决方案包括删除对象,更新其值,然后重新插入它,触发优先级队列的比较器。但是,是否有更有效的替代方法来围绕 PriorityQueue 创建包装类?

答案

不幸的是,删除和重新插入仍然是最有效的方法。 PriorityQueue 在插入时本质上将新元素插入到适当的位置,从而优化队列性能。在出队操作期间搜索最高优先级的元素会显着影响性能。

TreeMap 和 HashMap 都存在此限制(如果元素哈希码更改,则会失败)。

创建包装类可能涉及将比较代码从入队移动到出队,从而无需在入队期间进行排序。然而,这种方法会损害性能并且需要在优先级更新时进行同步。由于无论哪种方式都需要同步,因此出队和重新入队提供了更简单且性能更高的解决方案。

以上是## 您可以在不删除并重新插入的情况下更新 Java PriorityQueue 中的优先级吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn