如果我将poll()方法与PriorityQueue和可比较接口一起使用,它会返回什么



我使用PriorityQueue,并且我已经实现了可比较类,使用compareTo方法,

现在我想知道我的队列是否排序,如果我使用poll()方法,这会返回最小costSum的队列吗?

类:State.java

public class State<N extends Comparable<N>> implements Comparable<State<N>> {
private final ArrayList<Integer> board;
private State<N> predecessor;
private double totalCostFromStart; //g(x)
private double minimumRemainingCostToTarget; //h(x)
private double costSum; //f(x)
private Move direction;
public State(ArrayList<Integer> board,
State<N> predecessor,
double minimumRemainingCostToTarget,
Move direction) {
this.board = board;
this.predecessor = predecessor;
this.totalCostFromStart = predecessor == null ? 0 : predecessor.totalCostFromStart + 1;
this.minimumRemainingCostToTarget = minimumRemainingCostToTarget;
this.direction=direction;
calculateCostSum();
}
private void calculateCostSum() {
this.costSum = this.totalCostFromStart + this.minimumRemainingCostToTarget;
}
@Override
public int compareTo(State<N> nNode) {
int compare = Double.compare(this.costSum, nNode.costSum);
if (compare == 0) return 0;
else return this.costSum>nNode.costSum ? 1:-1;
}

类:AStar.java

public State AStar(ArrayList<Integer> initialBoard,
State source,
ArrayList<Integer> target,
Heuristic heuristic){
int minimumRemainingCostToTarget= heuristic.getRank(initialBoard, target);
source = new State( initialBoard,null,0, minimumRemainingCostToTarget,null);
PriorityQueue<State> open = new PriorityQueue<>();
Set<ArrayList<Integer>> close = new HashSet<>(181440);
//add initial state to ouverts, f(n) is an attribut in source.
open.add(source);
while(!close.isEmpty()){
State currentState = open.poll();//<<<----------------------
}
return null;
}

现在我想知道我的队列是否排序,如果我使用poll((方法,这会返回最小costSum的队列吗?

Javadoc描述了这一点:

此队列的头是关于指定排序的最少元素。。。队列检索操作轮询、移除、查看和元素访问队列头部的元素。

所以,是的,它是最小元素。

但是,请注意,队列不是内部排序的:如果打印优先级队列,您可能会注意到它们不是按升序显示的。元素简单地以具有堆属性的顺序存储,这允许在移除最小元素后有效地更新数据结构。

最新更新