2014-02-23 18 views
0
my code: 

TreeMap<String,Book> booksTree=new TreeMap<String,Book>(new StringCompare()); 
Book b1=new Book("b1"); 
booksTree.put(b1.getCode(), b1); 
Book b3=booksTree.get(b1); 
System.out.println(b3.toString()); 

我在別的崗位讀到這裏,我必須添加比較這樣寫道:TreeMap的<字符串,對象> ClassCastException異常

import java.util.Comparator; 

public class StringCompare implements Comparator<String> 
{ 
    public int compare (String c1, String c2) 
    { 
     return c1.compareTo(c2); 
    } 

} 

,我也得到:

Exception in thread "main" java.lang.ClassCastException: maman18.Book cannot be cast to java.lang.String 
at maman18.StringCompare.compare(StringCompare.java:1) 
at java.util.TreeMap.getEntryUsingComparator(Unknown Source) 
at java.util.TreeMap.getEntry(Unknown Source) 
at java.util.TreeMap.get(Unknown Source) 
at maman18.Main.main(Main.java:31) 

這是第一次我使用TreeMap的字符串,不知道如何使用它,請幫助我解決這個問題,以便get函數工作。

回答

2
Book b3=booksTree.get(b1); 
--------------------------^ 

該參數必須是字符串

public V get(Object key) : 

的方法調用返回的值以指定鍵(在烏爾情況字符串)被映射,或如果此映射不包含密鑰的映射,則返回null。

+0

非常感謝你的 當前鍵進行比較,它的工作原理:) – user3343751

+0

我很高興能幫助ü親愛的:) – Kick

0

與嘗試,

TreeMap<String,Book> booksTree = new TreeMap<String,Book>(); 
6

問題是get方法需要一個與您定義的映射具有相同數據類型的鍵(即您的情況爲String)。

所以它應該是:

Book b3=booksTree.get(b1.getCode()); 

這在doc指定:

ClassCastException - 如果關鍵是不合適的類型爲這個 地圖(可選)

它說是可選的,因爲對於每個示例HashMapget將重新轉到null。所以你應該有一個NullPointerException代替線System.out.println(b3.toString());

但是在TreeMap的情況下,這個例外是thrown

ClassCastException - 如果指定鍵不能與地圖

相關問題