2013-04-08 76 views
0

我有問題使用TreeSet排序我的HashMap。以下是我的代碼:Java:使用樹類與類類型

private static HashMap<OddMove, Integer> sortHashMap(
     HashMap<OddMove, Integer> hm) { 
    Map<OddMove, Integer> tempMap = new HashMap<OddMove, Integer>(); 
    for (OddMove wsState : hm.keySet()) { 
     tempMap.put(wsState, hm.get(wsState)); 
    } 

    List<OddMove> mapKeys = new ArrayList<OddMove>(tempMap.keySet()); 
    List<Integer> mapValues = new ArrayList<Integer>(tempMap.values()); 
    HashMap<OddMove, Integer> sortedMap = new LinkedHashMap<OddMove, Integer>(); 
    TreeSet<OddMove> sortedSet = new TreeSet<OddMove>(mapKeys); 
    Object[] sortedArray = sortedSet.toArray(); 
    int size = sortedArray.length; 
    for (int i = 0; i < size; i++) { 
     sortedMap.put(mapKeys.get(mapValues.indexOf(sortedArray[i])), 
       (Integer) sortedArray[i]); 
    } 
    return sortedMap; 
} 

下面是我得到的錯誤:

ABORTING: Exception in odd.UEPlayer3.choseMove() 
java.lang.ClassCastException: odd.OddMove 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 java.util.AbstractCollection.addAll(AbstractCollection.java:334) 
at java.util.TreeSet.addAll(TreeSet.java:312) 
at java.util.TreeSet.<init>(TreeSet.java:160) 
at odd.UEPlayer3.sortHashMap(UEPlayer3.java:196) 
at odd.UEPlayer3.chooseMove(UEPlayer3.java:101) 
at boardgame.Client.playMove(Client.java:109) 
at boardgame.Client.processMessage(Client.java:86) 
at boardgame.Client.clientLoop(Client.java:177) 
at boardgame.Client.run(Client.java:73) 
at java.lang.Thread.run(Thread.java:722) 

會很感激一些幫助

回答

0

我猜OddMove是一個自定義類,你已經寫了。如果是這樣的話,您需要更新它才能實現Comparable接口。

+0

是的,我只是想通了。謝謝 – ueg1990 2013-04-09 00:28:37