package test;import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;public class StudentForSet implements Comparable{
private String name;
private int age;

public StudentForSet(String name, int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "name:"+name+" "+"age:"+age;
}
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
SortedSet set = new TreeSet();
set.add(new StudentForSet("eiok",23)); //行10
set.add(new StudentForSet("zhangsan",21));//行11
set.add(new StudentForSet("wangwu",24));//行12
set.add(new StudentForSet("bak",25));//行13
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
@Override
public int compareTo(Object obj) {
// TODO Auto-generated method stub
StudentForSet student = (StudentForSet) obj;//将参数对象强转成当前类类型
return this.age-student.age;
}
为了更好理解compareTo这个重写的方法,求高手解释下this.age 和 student.age
}

解决方案 »

  1.   

    输出结果为:
    name:zhangsan age:21
    name:eiok age:23
    name:wangwu age:24
    name:bak age:25
      

  2.   

    SortedSet是一个按照元素递增排序的集合,根据compareTo方法排序。StudentForSet类改写了compareTo方法,因此会按照改写的方法进行排序。compareTo方法是对两个对象进行比较,在这里是对两个StudentForSet对象进行比较,可以通过以下代码理解:StudentForSet sf1 = new StudentForSet("eiok", 23);
    StudentForSet sf2 = new StudentForSet("zhangsan", 21);
    int result = sf1.compareTo(sf2);
    if (result > 0) {
    System.out.println(" sf1 大于sf2");
    } else if (result == 0) {
    System.out.println(" sf1 等于sf2");
    } else {
    System.out.println(" sf1 小于sf2");
    }
      

  3.   

    this.age-student.age;在上面的代码中,int result = sf1.compareTo(sf2);
    this.age 就相当于 sf1.age,
    student.age 相当于 sf2.age如果反过来sf2.compareTo(sf1);
    那么this.age 就相当于 sf2.age,
    student.age 相当于 sf1.age
      

  4.   


    你说的这些我都清楚,只是我不明白,当调用new StudentForSet("eiok",23),this肯定就是当前对象啦,那么StudentForSet student = (StudentForSet) obj;是怎么把new StudentForSet("zhangsan",21)这个对象传给obj的,然后进行比较。
      

  5.   

    这个比较的过程是SortedSet自己处理的,类似冒泡排序的的两两进行比较。
      

  6.   

    要理解对象的含义,不同的对象就好比不同的人,你的年龄和他的年龄是不一样的,虽然都叫做“age”,同时还要理解,java里面的参数传递都是值传递。你的age和他的age里面的值是不一样的。