Java 优先级队列的值更改后无法自动排序
比如说,Java 优先级队列的值更改后无法自动排序,java,sorting,priority-queue,Java,Sorting,Priority Queue,比如说, class App{ int k; public App(int k) { this.k = k; } } 主要代码如下: App one = new App(2); App Two = new App(3); PriorityQueue<App> p = new PriorityQueue<>(2,new Comparator<App>() { @Override
class App{
int k;
public App(int k)
{
this.k = k;
}
}
主要代码如下:
App one = new App(2);
App Two = new App(3);
PriorityQueue<App> p = new PriorityQueue<>(2,new Comparator<App>() {
@Override
public int compare(App o1, App o2) {
if(o1.k < o2.k) return -1;
return 1;
}
});
p.add(two);
p.add(one);
这个仍然在队列的最前面(p.peek.k是9)!!优先级队列的值更改后无法自动排序
是否有一种方法可以在队列值更改时对其进行排序
希望有人能提供帮助。
PriorityQueue
和其他使用类似元素的集合(例如TreeSet
)不适用于可变对象。它们只有在元素的顺序没有改变的情况下才起作用(或者是因为你没有以那种方式改变它们,或者它们是不可变的,因此根本不能被改变)
所以你所做的,你不应该。但是,如果您仍然这样做,PriorityQueue
不会提供重做订购的方法
您的两个选择:
- 删除所有元素并再次添加它们
- 创建一个新的
,添加所有元素并使用它PriorityQueue
另一方面,您的
比较器甚至不正确,如果两个值相等,它应该返回0
。尝试使用o1.k-o2.k
或Integer.compare(o1.k,o2.k)
无法让集合知道您更改了其密钥。
one.k = 9;
two.k = 8;