更新HashMap/ArrayList传递给PriorityQueue比较器



我为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的唯一方法是删除您更改的元素,然后重新插入它。

最新更新