使用Comparator接口的错误

时间:2013-05-09 15:04:02

标签: java data-structures priority-queue comparator

我正在尝试使用优先级队列编写一个简单的应用程序。我收到以下错误 - “错误:leastPriority不是抽象的,并且不会覆盖比较器中的抽象方法比较(整数,整数)”和“错误:不兼容的类型 比较器cmp = new leastPriority(); “

有人可以用这段代码指出问题。

我的代码是:

class leastPriority implements Comparator<Integer> {    
    public int compare(Reservation x, Reservation y){
        if(x.getPriority() > y.getPriority()){
            return -1;
        }
        if(x.getPriority() < y.getPriority()){
            return +1;
        }
        return 0;
    }
}

public class prioQueue{

    public static void main(String args[]){
        Comparator<Reservation> cmp = new leastPriority();
        PriorityQueue<Reservation> queue = new PriorityQueue<Reservation>(10,cmp);
        queue.add(new Reservation(1,"Andy",10));
        queue.add(new Reservation(1,"Peter",1));
        queue.add(new Reservation(1,"John",4));

        while(true){
            Reservation r = queue.poll();
            if(r==null){
                break;
            }
            System.out.println(r.getName());
        }

    }
}

2 个答案:

答案 0 :(得分:7)

Comparator<T>的类型参数与compare(T o1, T o2)方法的参数不匹配。由于在界面中它们是相同的,因此您需要为它们提供相同的类型。

改变这个:

class leastPriority implements Comparator<Integer>

为:

class leastPriority implements Comparator<Reservation>

答案 1 :(得分:1)

leastPriority应该实施Comparator<Reservation>而不是Comparator<Integer>。泛型类型是在compare()方法中被接受为参数的类型。

P.S。使用第一个大写字母(PrioQueue)和(LeastPriority)命名所有Java类是一个很好的做法。