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

一段代码,关于compareable接口的使用,不太理解
Java code
import java.util.Set ;
import java.util.TreeSet ;
class Person implements Comparable<Person>{
    private String name ;
    private int age ;
    public Person(String name,int age){
        this.name = name ;
        this.age = age ;
    }
    public String toString(){
        return "姓名:" + this.name + ";年龄:" + this.age ;
    }
    public int compareTo(Person per){
        if(this.age>per.age){
            return 1 ;
        }else if(this.age<per.age){
            return -1 ;
        }else{
            return this.name.compareTo(per.name) ;
        }
    }
};
public class test01{
    public static void main(String args[]){
        Set<Person> allSet = new TreeSet<Person>() ;
        allSet.add(new Person("张三",30)) ;
        allSet.add(new Person("李四",31)) ;
        allSet.add(new Person("王五",32)) ;
        allSet.add(new Person("王五",32)) ;
        allSet.add(new Person("王五",32)) ;
        allSet.add(new Person("赵六",33)) ;
        allSet.add(new Person("孙七",33)) ;
        System.out.println(allSet) ;
    }
};

这段代码中的compareTo方法的使用看不明白:
Java code
public int compareTo(Person per){
        if(this.age>per.age){
            return 1 ;
        }else if(this.age<per.age){
            return -1 ;
        }else{
            return this.name.compareTo(per.name) ;
        }


这里的比较this.age>per.age,到底是拿谁和谁比呢?还有最后的return this.name.compareTo(per.name)怎么理解

------解决方案--------------------
探讨
是和将要被比较的对象比
allSet发现你要加入一个对象,而set只能保存不同的对象,于是他就要把新加进来的对象和之前的对象比较是否有相同的,如果是相同的就不要加,但是,因为你这个类是自定义的,set最开始不知道如何来比较你这个对象,所以你必须实现Comparable方法,这样set就知道既然你实现了这个方法,那么set就会用你这个方法来和其他已存在的对象比较,所以此时,传入的对象其实就是set……