2012-09-24 71 views
6

我創建了一個HashMap對象,它將String作爲鍵和相應的值存儲爲int。現在我想擁有一個Priority Queue,它的所有字符串都存在於HashMap對象中,並賦值作爲分配優先級的參考。我寫了下面的代碼Java中的HashMap對象的優先級隊列

public class URIQueue { 

     private HashMap<String,Integer> CopyQURI; 
     private PriorityQueue<String> QURI; 

     public class TComparator<String> { 
     public int compareTo(String s1, String s2) { 
      if (CopyQURI.get(s2) - CopyQURI.get(s1) >= 0) { 
       return 1; 
      } else { 
       return 0; 
      } 
     } 
     } 

     public URIQueue() { 
     CopyQURI=new HashMap<>(100); 
     TComparator<String> tc=new TComparator<>(); 
     QURI=new PriorityQueue<>(100, tc); //Line x 
     } 
} 

行x顯示錯誤無法推斷優先級隊列的類型參數。請指導我做了什麼錯誤。

+3

這種「可變比較器」可能非常危險並且容易出錯。你最好創建一個新類來保存字符串和整數。 –

回答

3

您提到的錯誤狀態,它無法猜測您已省略的泛型類型參數。原因是你正在使用的構造函數是未知的。它不知道,因爲你的第二個參數不是比較器。您的比較器必須實現java.util.Comparator interface以保證構造函數能夠接受。

public class TComparator<String> implements Comparator<String> { 

    @Override 
    public int compare(String arg0, String arg1) { 
     // ... 
    } 
} 

而且介意,在Comparator接口中的適當方法被調用compare,而不是compareTo

一般的建議,我有路易斯沃瑟曼同意,對於兩個給定參數的比較應該始終返回相同的結果,而不是依賴於應用程序的狀態。這太容易了,不會想到某種情況,並且應用程序最終有缺陷。

+0

thanks.it工作.. –