我为PriorityQueue编写了一个比较器,这样它就会根据HashMap中的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;
}
}
}
如果您更改了在PriorityQueue
中用作键的值,则需要调整队列以反映更改。否则,您的队列可能处于无效状态。数据结构无法跟踪您对用作键的任何值所做的更改。如果你改变了键,你必须通知数据结构发生了变化。
peek
时,指向的队列将不会重新组织自己。所有peek
所做的就是返回队列中的第一个项目。它所做的唯一比较是查看队列是否为空。
重新组织Java PriorityQueue
的唯一方法是删除您更改的元素,然后重新插入它。