gpt4 book ai didi

java - 优先级队列什么时候会调用元素的compareTo?

转载 作者:行者123 更新时间:2023-12-02 06:01:18 26 4
gpt4 key购买 nike

我正在写一个由点和框组成的ai。我正在使用优先级队列来包含盒子的边缘。我根据盒子的优先级采取行动。移动后,我必须更新优先级和 pool() 队列头。

这是一些代码:

   public int compareTo(MyPosition o) {
if (new Integer(o.getPriority())> new Integer(getPriority())) {
return 1;
}else if(new Integer(o.getPriority())== new Integer(getPriority())){
return 0;
}else {
return -1;
}

}

但是我的移动顺序与队列的优先级不对应。如下图(最后一个数字是边的优先级):

enter image description here

谁能解释一下原因以及如何改进它。 (我猜优先级队列不会比较更新后的优先级。)

非常感谢。

最佳答案

在 Java 中,PriorityQueue 是作为堆实现的。因此,compareTo() 在插入时进行评估。

您可能面临的问题之一是您可能没有覆盖正确的方法(正如其他人指出的那样)。向您的compareTo() 方法添加@Override 注释,编译器会告诉您是否没有按照您认为正在做的事情进行操作(如果您使用的是Java 1.5 或更高版本)。

这里是代码:

public class MyPosition implements Comparable<MyPosition>{
private Integer priority;

@Override
public int compareTo(MyPosition that) {
return this.priority.compareTo(that.priority);
}
}

关于java - 优先级队列什么时候会调用元素的compareTo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22661660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com