我为PriorityQueue编写了一个比较器,以便根据HashMap中ArrayList的第一个值给出最小的值。
我的问题是,在我的程序的其余部分,我需要更新/更改ArrayList中的第一个值。我不知道如何确保优先级队列始终根据更新给出正确的结果?
由于
public class MyComparator implements Comparator<Integer>{
HashMap<Integer, ArrayList<Integer>> hm;
public MyComparator(HashMap<Integer, ArrayList<Integer>> hm){
this.hm = hm;
}
@Override
public int compare (Integer num, Integer num1){
ArrayList<Integer> list = hm.get(num);
int w = list.get(0);
ArrayList<Integer> list1 = hm.get(num1);
int w1 = list1.get(0);
if(w1 - w == 0){
return 0;
}
if(w1 - w <= 0){
return 1;
}
else{
return -1;
}
}
}
答案 0 :(得分:0)
如果您更改了PriorityQueue
中用作键的值,则需要调整队列以反映更改。否则,您的队列可能处于无效状态。数据结构无法跟踪您对作为密钥使用的任何值所做的更改。如果更改密钥,则必须通知数据结构已更改的内容。
当您致电peek
时,队列将不会重新组织自己。所有peek
都会返回队列中的第一项。它唯一的比较是查看队列是否为空。
重新组织Java PriorityQueue
的唯一方法是删除您更改的元素,然后重新插入它。