我如何得到一个PriorityQueue排序我希望它排序的东西?
我正在尝试使用a PriorityQueue来命令对象Comparator.
这可以很容易地实现,但是对象类变量(比较器计算优先级)可能在初始插入后发生变化.大多数人都提出了删除对象,更新值并再次重新插入的简单解决方案,因为这是优先级队列的比较器付诸行动的时候.
除了在PriorityQueue周围创建一个包装类之外,还有更好的方法吗?
我试图插入整数PriorityQueue,我知道:
如果在PriorityQueue构造a时未指定比较器,则使用存储在队列中的数据类型的默认比较器.默认比较器将按升序对队列进行排序
但是,我得到的输出不是按排序顺序.运行以下代码后的输出是:[2, 4, 8, 6]
public static void main(String args[]) {
PriorityQueue<Integer> q = new PriorityQueue<Integer>(10);
q.offer(4);
q.offer(2);
q.offer(8);
q.offer(6);
System.out.print(q);
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下原因吗?
我知道PriorityQueue在add()使用对象的compareTo()方法对元素进行排序时会自动对元素进行排序。假设我想在某个时候更改队列中元素的优先级。PriorityQueue考虑到元素的优先级发生了变化,我如何明确地命令再次对自身进行排序?