我正在尝试创建一个优先级队列,其中的键将为Total()= getCost()+ getTax()。我正在像这样设置优先级队列:

PriorityQueue<Node> pq = new PriorityQueue<Node>(50);


我一直在寻找有关优先级队列的内容,并且阅读了有关比较器的内容,但我仍然一无所获。如何使用以下方法为优先级队列设置密钥?

获得总计的方法:

public int compareTo(Node y){
    if (getCost() + getTax() > y.getCost() + y.getTax())
        return 1;

    else if (getCost() + getTax() < y.getCost() + y.getTax())
        return -1;

    return 0;
}

最佳答案

初始化PriorityQueue时,可以直接通过Comparator:

PriorityQueue<Node> pq = new PriorityQueue<Node>(50, (x, y) -> {
if (x.getCost() + x.getTax() > y.getCost() + y.getTax())
        return 1;

    else if (x.getCost() + x.getTax() < y.getCost() + y.getTax())
        return -1;

    return 0;
});

09-29 21:37