Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.PriorityQueue';s元素在poll()上不向上移动_Java_Priority Queue - Fatal编程技术网

java.util.PriorityQueue';s元素在poll()上不向上移动

java.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&

我在一个图上实现了一个BFS,其中节点由一个状态类的对象标记(我实现了一个隐式的equals-to方法进行比较)

我已经使用PriorityQueue和返回1的比较器实现了我的队列,因为我想扩展程序来处理DFS、Astar等,这可以通过更改比较器内部的逻辑来实现

以下是相关代码:

//BFSComparator.java

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 我认为你应该用队列来声明frontierList

需要DFS时,请使用LinkedList


当需要BFS时,使用PriorityQueue和比较器返回所需的最小或最大状态

Erm。。。你有一个比较器返回<代码>1。为什么您希望它对任何东西进行排序?因为1总是表示较大,而-1表示较小,所以我使用-1表示DFS,1表示BFSOh my。我想你在找一份工作。你的比较人不尊重合同。一个州不能比另一个州既大又小。
for(State x:frontierList) {
             //print x
}
public int compare(State x, State y)