日期:2014-05-20  浏览次数:20710 次

有关comparable,谢谢!!!!
这是Student.java
public   class   Student   implements   Comparable   {
String   name;
int   age;
public   Student(String   name,   int   age)   {
super();
this.name   =   name;
this.age   =   age;
}
public   String   toString()   {
return   "Student   "+name+ "   age: "+age;
}
public   int   compareTo(Object   o){
Student   s=(Student)o;
if   (this.age <s.age)   return   -1;        
else   if   (this.age==s.age)   return   0;
else   return   1;

}

public   boolean   equals(Object   o){
System.out.println( "Run   Equals ");
if   (this==o)   return   true;
if   (o==null)   return   false;
if   (this.getClass()!=o.getClass())   return   false;
Student   s=(Student)o;
if   (this.name.equals(s.name)   &&   this.age==s.age)   return   true;
else   return   false;
}
public   int   hashCode(){
return   age+name.hashCode();
}

}
这是TestHashSet.java
import   java.util.*;
public   class   TestHashSet   {
public   static   void   main(String[]   args){
Set   set=new   HashSet();

Student   s1=new   Student( "Liucy ",30);
Student   s2=new   Student( "Chenzq ",35);
Student   s3=new   Student( "BaiLu ",18);
Student   s4=new   Student( "Liucy ",30);
set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
print(set);

}
public   static   void   print(Collection   c){
Iterator   it=c.iterator();
while(it.hasNext()){
Object   o=it.next();
System.out.println(o);
}
}
}
  TestHashSet里的输出语句调用的是equals和toString方法,请问是如何调用的.还有   ,如何使TestHashSet的输出结果按照compareTo和hashCode定义的方法输出

------解决方案--------------------
对象实现Comparable的compareTo方法是为排序做准备的
覆写equals方法是为了给出自己的相同对象的判断逻辑
hashCode方法是为了保证每个对象都能在内存中拥有唯一标识
toString方法是打印时默认调用的

以上方法用途不同

------解决方案--------------------
打印的时候会自动调用compareTo方法。
------解决方案--------------------
Set set=new HashSet(); 应该改用TreeSet才行
------解决方案--------------------
HashSet是无序列的
不做排序维护