0
我为PriorityQueue编写了一个比较器,以便根据HashMap中ArrayList中的第一个值给出最小值。更新传递给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;
}
}
}
它会给你在调用比较方法时的正确结果。另外,只是提及它不应该是'if(w1 - w <0){return 1;}'? – Thrasher
所以每次我做PriorityQueue.peek()时都会调用比较方法; ?因此使用更新后的哈希映射/数组列表?是的,谢谢你指出......'='不应该在那里 – Lsldioo