更新传递给PriorityQueue Comparator的HashMap / ArrayList

时间:2016-11-07 03:55:00

标签: java hashmap priority-queue comparator

我为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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果您更改了PriorityQueue中用作键的值,则需要调整队列以反映更改。否则,您的队列可能处于无效状态。数据结构无法跟踪您对作为密钥使用的任何值所做的更改。如果更改密钥,则必须通知数据结构已更改的内容。

当您致电peek时,队列将不会重新组织自己。所有peek都会返回队列中的第一项。它唯一的比较是查看队列是否为空。

重新组织Java PriorityQueue的唯一方法是删除您更改的元素,然后重新插入它。