当前位置: 代码迷 >> J2SE >> 一段代码,关于compareable接口的使用,不太理解,该怎么处理
  详细解决方案

一段代码,关于compareable接口的使用,不太理解,该怎么处理

热度:17   发布时间:2016-04-24 00:48:30.0
一段代码,关于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……
  相关解决方案