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函数正常工作。
答案 0 :(得分:6)
问题是get方法需要一个与您定义地图的数据类型相同的密钥(例如String
)。
所以它应该是:
Book b3=booksTree.get(b1.getCode());
这在doc:
中指定ClassCastException - 如果键的类型不合适 地图(可选)
它表示可选,因为对于每个示例HashMap
,get
将返回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>();