黑马程序员技术交流社区
标题:
学生成绩排序几点问题
[打印本页]
作者:
李大伟
时间:
2013-4-19 16:11
标题:
学生成绩排序几点问题
本帖最后由 李大伟 于 2013-4-19 22:58 编辑
class Student implements Comparable<Student>{
private String name;
private int ma,cn,en;
private int sum;
Student(String name,int ma,int cn,int en){
this.name = name;
this.ma = ma;
this.cn = cn;
this.en = en;
sum = ma+cn+en;
}
public int compareTo(Student s){
int num = new Integer(this.sum).compareTo(new Integer(s.sum));
if(num==0)
return this.name.compareTo(s.name);
return num;
}
public String getName(){
return name;
}
public int getSum(){
return sum;
}
public int hashCode(){
return name.hashCode()+sum*78;
}
public boolean equals(Object obj){
if(!(obj instanceof Student))
throw new ClassCastException("类型不匹配");
Student s = (Student)obj;
return this.name.equals(s.name) && this.sum==s.sum;
}
public String toString(){
return "student["+name+","+ma+","+cn+","+en+"]";
}
}
复制代码
我想问下 为什么要重写toString,equals,hashCode,作用是什么,求详解。
作者:
刘胜寒
时间:
2013-4-19 16:27
equals 是为了判定两个学生是否为同一人的。。。
hashCode和equals有个不成文的规定。
如果equals相等那么hashCode也相等,在泛型那个个部分有提到。
toString如果不重写的话会返回类型+@+hashCode()
其他我就不知道了....
作者:
先小涛
时间:
2013-4-19 16:34
通俗的说:
toString方法是你要打印输出这个对象时,执行的代码,若System.out.println(student)时,打印的字符格式就是"student["+name+","+ma+","+cn+","+en+"]"
equals,hashCode:当你要存入以哈希表为数据结构的集合(如HashSet、HashMap)中时,会调用hashCode方法,若返回值不同,则这个集合认为它们不是同一个对象;返回值相同,则再调用equals方法来判断是否相同。
compareTo:是你要存入以二叉树为数据结构的集合(如TreeSet、TreeMap)中时,会调用此方法来判断对象是否相同
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2