代码之家  ›  专栏  ›  技术社区  ›  Marcus Whybrow

当Java PriorityQueue的元素更改优先级时更新Java PriorityQueue

  •  49
  • Marcus Whybrow  · 技术社区  · 15 年前

    我正试着用一个 PriorityQueue Comparator .

    这很容易实现,但是对象类变量(比较器使用其计算优先级)在初始插入后可能会发生变化。大多数人都提出了一种简单的解决方案,即删除对象、更新值并再次插入,因为这是优先级队列的比较器开始工作的时候。

    6 回复  |  直到 10 年前
        1
  •  1
  •   Ricola    4 年前

    您必须删除并重新插入,因为队列的工作方式是在插入新元素时将其放置在适当的位置。这比每次从队列中取出时查找最高优先级元素的方法要快得多。缺点是插入元素后无法更改优先级。树映射具有相同的限制(HashMap也是如此,当其元素的hashcode在插入后发生更改时,HashMap也会中断)。

    如果要编写包装器,可以将比较代码从排队移动到出列。您不再需要在排队时进行排序(因为如果允许更改,它创建的顺序无论如何都不可靠)。