使用自定义比较器类出错

时间:2012-12-02 09:59:50

标签: java priority-queue dijkstra

我正在尝试将Dijkstra的算法用于adjaceny矩阵,我正在使用Java优先级队列来实现。 对于我的顶点我正在创建一个自定义比较器类,但我收到以下错误:

 <anonymous Dijkstra$1> is not abstract and does not override abstract method compare(vertex,vertex) in java.util.Comparator
        PriorityQueue<vertex> Q = new PriorityQueue<vertex>(n,new Comparator<vertex>() {        

这是代码:

import java.util.Scanner;
import java.io.File;
import java.util.PriorityQueue;
import java.util.Comparator;
class vertex {
    int v,d;
    public vertex(int num,int dis){
        v =num;
        d=dis;
    }
    public int getv(){
        return v;
    }
    public int getd(){
        return d;
    }
}

然后我用它来创建一个新的优先级队列:

PriorityQueue<vertex> Q = new PriorityQueue<vertex>(n,new Comparator<vertex>() {        
            public int compare (Object a, Object b){
            vertex v1 = (vertex)a;
            vertex v2 = (vertex)b;
            if (v1.getd() > v2.getd()){
                return +1;
            }else if (v1.getd() < v2.getd()){
                return -1;
            }else {
                return 0;
            }
        }});

1 个答案:

答案 0 :(得分:0)

你得到的错误是因为你没有实现正确的方法。 compare Comparator<vertex>方法的签名为public int compare (vertex a, vertex b);而非public int compare (Object a, Object b);

此外,正如JB Nizer明智地说的那样,最好按照以下方式实施比较方法:

public int compare (vertex a, vertex b) {
    return Integer.compare(a.getd(), b.getd());
}