【问题标题】:Changing the priority of an element in a PriorityQueue更改 PriorityQueue 中元素的优先级
【发布时间】:2015-05-23 20:27:39
【问题描述】:

我知道PriorityQueue 使用对象的compareTo() 方法在add()ing 时自动对元素进行排序。假设我想在某个时候更改队列中元素的优先级。鉴于元素的优先级已更改,我如何明确命令 PriorityQueue 再次对其自身进行排序?

【问题讨论】:

标签: java queue priority-queue


【解决方案1】:

删除对象,更改其优先级,然后将其重新添加到队列中。

我的直觉是数据结构通常不会观察对象的内部状态,它需要 add() 或 remove() 操作来触发比较器的重新调用。调用 Collections.sort() 也可以,但您必须将队列转换为列表,然后再转换回队列。如果您一次更改许多优先级,这可能更有意义。

更好的是,您可以更新 n 个优先级,然后添加和删除最后一个。

【讨论】:

  • 真的没有别的办法了吗?
【解决方案2】:

唯一的选择是删除、修改和添加您的对象。 PriorityQueue 不会在读取时更新其内部结构。以下是 peek() 的暗示,例如:

public E peek() {
    if (size == 0)
        return null;
    return (E) queue[0];
}

如您所见,不检查元素顺序是否已更改。

【讨论】:

  • 谢谢,我也是这么想的。
猜你喜欢
  • 2010-12-24
  • 1970-01-01
  • 2012-06-15
  • 2020-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多