【问题标题】:Errors using the Comparator interface使用比较器接口的错误
【发布时间】:2013-05-09 15:04:01
【问题描述】:

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

谁能指出这段代码的问题。

我的代码是:

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());
        }

    }
}

【问题讨论】:

    标签: java data-structures priority-queue comparator


    【解决方案1】:

    Comparator&lt;T&gt; 的类型参数与compare(T o1, T o2) 方法的参数不匹配。由于在接口中它们是相同的,因此您需要为它们赋予相同的类型。

    改变这个:

    class leastPriority implements Comparator<Integer>
    

    到:

    class leastPriority implements Comparator<Reservation>
    

    【讨论】:

    • 谢谢.. 愚蠢的错误:P
    【解决方案2】:

    leastPriority 应该实现 Comparator&lt;Reservation&gt; 而不是 Comparator&lt;Integer&gt;。泛型类型是在您的 compare() 方法中被接受为参数的类型。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2016-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多