2014-03-02 50 views
2

我似乎無法找出爲什麼我得到這個ClassCastException異常用下面的代碼:ClassCastException異常時,轉換列表<地圖<字符串,雙>>到TreeSet的<地圖<字符串,雙>>

public static void main(String[] args) {   

    Map<String,Double>   test0 = new TreeMap<String,Double>(); 
    test0.put("test", 1.); 
    List<Map<String,Double>> test1 = Arrays.asList( test0); 

    Set<Map<String,Double>  test2 = new TreeSet<Map<String,Double>>(test1) 
} 

所以不是我試圖通過測試1迭代並單獨放置地圖到TEST2如下:

public static void main(String[] args) {   

    Map<String,Double>   test0 = new TreeMap<String,Double>(); 
    test0.put("test", 1.); 
    List<Map<String,Double>> test1 = Arrays.asList( test0); 
    Set<Map<String,Double>>  test2 = new TreeSet<Map<String,Double>>(); 

    for (Map<String,Double> mp : test1) 
     test2.add(mp); 
} 

都給予同樣的例外涉及可比:

Exception in thread "main" java.lang.ClassCastException: java.util.TreeMap cannot be cast to java.lang.Comparable 
at java.util.TreeMap.compare(TreeMap.java:1188) 
at java.util.TreeMap.put(TreeMap.java:531) 
at java.util.TreeSet.add(TreeSet.java:255) 
at Delete.main(Delete.java:20) 

任何深入瞭解爲什麼發生這種情況將不勝感激。謝謝!

+0

你爲什麼使用'TreeSet'?如果你必須使用它,你必須提供一種方法來比較'Map'。 –

+0

在我的項目中,我使用TreeSet來維護非重複項的排序順序。我應該使用不同的東西嗎? – RyanS

+1

那麼,您希望在什麼基礎上對「TreeSet」中的地圖進行排序? –

回答

8

TreeSet期望您或者傳遞Comparator作爲其元素類型,或者傳遞其元素實現ComparableMap未執行Comparable,並且您尚未提供Comparator

但是,如果您使用HashSet,它會開箱即用,因爲Map具有指定的hashCode()實現。

+0

HashSet的作品。謝謝!!!!!畢竟,我根本不需要他們。 – RyanS

相關問題