有关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是无序列的
不做排序维护