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方法的使用看不明白:
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)怎么理解
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方法的使用看不明白:
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中已存在的那些对象
TreeSet是用TreeMap来实现的
allSet.add(new Person("张三",30)) 这个对象是跟这个tree上的根节点上的对象开始循环比较,一直到找到合适的位置放下
找到一篇文章,lz可以参考一下。最后的return this.name.compareTo(per.name)是指年龄相同的时候,比较名字。TreeSet是要排序的,因此要分出个先后。至于compareTo等调试一下再下结论。