Java日常踩坑记录
PriorityQueue元素更新再排序问题
今天用PriorityQueue做堆时,在里面放了Node类,调试程序的时候发现不对劲,我中间更新了里面元素的值,但是PriorityQueue里面的元素顺序并没有改变…
static class Node{
int value;
int index;
public Node(){}
public Node(int v, int i){
value = v;
index = i;
}
}
public static void main(String[] args) {
Node node1 = new Node(65,1);
Node node2 = new Node(68, 2);
Node node3 = new Node(46,3);
PriorityQueue<Node> queue = new PriorityQueue<>(new Comparator<Node>() {
@Override
public int compare(Node o1, Node o2) {
return o1.value - o2.value;
}
});
queue.offer(node1);
queue.offer(node2);
queue.offer(node3);
if(!queue.isEmpty()) {
System.out.print(queue.poll().value+" ");
}
node2.value = 53;
while(!queue.isEmpty()) {
System.out.print(queue.poll().value+" ");
}
System.out.println();
}
原因 PriorityQueue只会在添加元素和删除元素时进行重排序(down或者up),修改元素时,并不是通过PriorityQueue来修改的,它也没有这个方法… 解决 目前的一个解决方法是,先删除再添加…
|