java.util.PriorityQueue';s元素在poll()上不向上移动
我在一个图上实现了一个BFS,其中节点由一个状态类的对象标记(我实现了一个隐式的equals-to方法进行比较) 我已经使用PriorityQueue和返回1的比较器实现了我的队列,因为我想扩展程序来处理DFS、Astar等,这可以通过更改比较器内部的逻辑来实现 以下是相关代码: //BFSComparator.javajava.util.PriorityQueue';s元素在poll()上不向上移动,java,priority-queue,Java,Priority Queue,我在一个图上实现了一个BFS,其中节点由一个状态类的对象标记(我实现了一个隐式的equals-to方法进行比较) 我已经使用PriorityQueue和返回1的比较器实现了我的队列,因为我想扩展程序来处理DFS、Astar等,这可以通过更改比较器内部的逻辑来实现 以下是相关代码: //BFSComparator.java import java.util.Comparator; public class BFSComparator implements Comparator<State&
import java.util.Comparator;
public class BFSComparator implements Comparator<State>{
@Override public int compare(State x, State y) {
return 1;
}
}
1) 我的比较仪有问题吗
2) 有没有更好的方法来做这件事?i、 例如,一个比优先级队列更好的容器,我可以在更改排序背后的逻辑时添加它,而不是使用具有不同调用名(如push和pop)的队列和堆栈?这将有助于我以后根据启发式对它们进行排序。或者我应该使用链表并执行基于插入排序的方法
编辑: 我想说得更清楚一点。我正在尝试实现一个集合,我可以通过一个公共的add(State)或State x=remove()抛出东西,而不考虑DFS或BFS(FIFO或LIFO)或其他基于优先级的算法,如a-Star和Beam搜索 我可能会扩展集合并实现add和其他方法
public int compare(State x, State y)
此方法返回正值表示x>y,负值表示x当需要BFS时,使用PriorityQueue和比较器返回所需的最小或最大状态Erm。。。你有一个比较器返回<代码>1。为什么您希望它对任何东西进行排序?因为1总是表示较大,而-1表示较小,所以我使用-1表示DFS,1表示BFSOh my。我想你在找一份工作。你的比较人不尊重合同。一个州不能比另一个州既大又小。
for(State x:frontierList) {
//print x
}
public int compare(State x, State y)