为什么使用HashMap时完全正常,一改为TreeMap就报错呀?请高手指点。 作者: 谷文仁 时间: 2013-3-23 10:40
仔细看看你代码:出错位置 47
int num=new Integer(this.age).compareTo (new Integer(this.name));
int num=new Integer(this.age).compareTo (new Integer(this.age)); 作者: 张豪杰 时间: 2013-3-23 10:41 本帖最后由 张豪杰 于 2013-3-23 10:44 编辑
你的compareTo方法里面有错
public int compareTo(Student s)//排序根据。
{
// int num=new Integer(this.age).compareTo (new Integer(this.name)); 这里你拿本对象的年龄和本对象的名字比,this.name是一个字符串,编译器没法将这个名字转换成对应的整形值,所以报出数据格式错误
//改成这样
int num = new Integer(this.age).compareTo(new Integer(s.age));
if(num==0)
return this.name.compareTo(s.name);
return num;
}
现在来说说为什么用hashMap没问题,用treeMap就出问题了
你的compareTo方法,语法上没有错误,只是逻辑出错了,所以用hashMap的时候,编译器没有报错,因为没有调用compareTo方法
编译器也就不知道存在逻辑错误
而用treeMap,每次存放元素都会调用compareTo方法,所以一运行的时候就报错了! 作者: 赵亚威 时间: 2013-3-23 12:28
首先你代码就写错了 因为在HashMap中是通过HashCode和equals来比较对象 而在TreeMap中是通过比较器或者自然排序来比较对象 但是你自然排序中的代码有误 不可比较 所以就会出现你这种现象 你可以这样改
int num = new Integer(this.age).compareTo(new Integer(s.age));
if(num==0)
return this.name.compareTo(s.name);
return num