我需要一个对象的优先级队列,但我一直收到这个错误:
symbol: constructor PriorityQueue(anonymous java.util.Comparator<map.Node>>)
location: class java.util.PriorityQueue<map.Node>
PriorityQueue<Node> pq = new PriorityQueue<Node>(new Comparator<Node>()
这是我的代码的摘录:
public class map {
static class Node {
Node parent;
State state;
private int cost;
public Node() {};
public Node(Node parent_passed, State state_passed, Integer cost_passed ) {
this.parent = parent_passed;
this.state = state_passed;
this.cost = cost_passed;
}
public int getCost()
{
return cost;
}
}
public static void main(String[] args)
{
PriorityQueue<Node> pq = new PriorityQueue<Node>(new Comparator<Node>()
{
public int compare(Node a1, Node a2) {
return a2.getCost() - a1.getCost();
}
});
}
有什么想法吗?我是否需要公开Node类并将其放在自己的文件中?
答案 0 :(得分:1)
您尝试使用不存在的构造函数来创建PriorityQueue对象。 JavaDoc(http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html)中没有定义PriorityQueue(Comparator)构造函数。它确实有一个为initialCapacity和一个比较器取一个int,你可能想尝试一下。
答案 1 :(得分:0)
问题是没有PriorityQueue<E>(Comparator<E>)
类型的构造函数
您可以获得的最接近的是PriorityQueue<E>(int InitialSize, Comparator<E>)
。请参阅here
只需将您的主要内容更改为:
public static void main(String[] args)
{
@Override
PriorityQueue<Node> pq = new PriorityQueue<Node>(10, new Comparator<Node>()
{
public int compare(Node a1, Node a2) {
return a2.getCost() - a1.getCost();
}
});