2013-05-09 73 views
0

我想用優先級隊列編寫一個簡單的應用程序。我收到以下錯誤 - 「error:leastPriority不是抽象的,並且不會覆蓋比較器中的抽象方法比較(Integer,Integer)」和「error:incompatible types Comparator 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()); 
     } 

    } 
} 

回答

7

Comparator<T>和你compare(T o1, T o2)方法的參數你的類型參數不匹配。由於在界面上它們是相同的,所以你需要給它們相同的類型。

更改此:

class leastPriority implements Comparator<Integer> 

到:

class leastPriority implements Comparator<Reservation> 
+0

謝謝..愚蠢的錯誤:P – Fox 2013-05-09 15:09:32

1

leastPriority應該實現Comparator<Reservation>,而不是Comparator<Integer>。泛型類型是在您的compare()方法中被接受爲參數的類型。

P.S.用第一個大寫字母(PrioQueue)和(LeastPriority)命名所有Java類是一種很好的做法。