TreeMap <string,object> ClassCastException </string,object>

时间:2014-02-23 16:38:06

标签: java

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());

我在其他帖子中读到我必须添加比较器所以写道:

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函数正常工作。

3 个答案:

答案 0 :(得分:6)

问题是get方法需要一个与您定义地图的数据类型相同的密钥(例如String)。

所以它应该是:

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

这在doc

中指定
  

ClassCastException - 如果键的类型不合适   地图(可选)

它表示可选,因为对于每个示例HashMapget将返回null。因此,您需要NullPointerException代替System.out.println(b3.toString());

但是对于TreeMap,此例外是thrown

  

ClassCastException - 如果指定的键无法与之比较   当前在地图中的键

答案 1 :(得分:2)

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

参数必须是String

public V get(Object key) : 

方法调用返回指定键(在大小写中为String)映射到的值,如果此映射不包含键的映射,则返回null。

答案 2 :(得分:0)

试试,

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