嗨,这是我从一本书中发现的一个问题。我不完全清楚在compareTo()方法中发生的事情。树集是一个已排序的类。那么它总是调用compareTo()吗?
在compareTo()里面如何根据,返回年龄 - ((人物)0)完成排序.age?
package javaapplication1;
import java.util.NavigableSet;
import java.util.SortedSet;
import java.util.TreeSet;
public class _157 {
public static void main(String args[]){
NavigableSet s=new TreeSet();
for(int i=50;i<55;++i){
s.add(new Person(i));
}
SortedSet s2=s.tailSet(new Person(52));
System.out.println(s2);
}
}
class Person implements Comparable{
private int age;
@Override
public int compareTo(Object t) {
return ((Person)t).age-age;
}
Person(int age){
this.age=age;
}
public String toString(){
return "Person("+age+")";
}
}
答案 0 :(得分:0)
如果仔细查看Java中的TreeMap
类put
方法,则在添加类之前会对新对象进行比较。
在Map中添加对象时,将使用在Domain类中实现的compareTo
方法。 (仅供参考,TreeSet最终使用TreeMap以排序顺序存储对象)。
任何修改操作最终都会调用&quot; compareTo method to sort the objects in Map and based on the result of
compareTo`方法,存储对象。
compareTo方法在您的情况下执行的操作:它将比较两个人的年龄并返回其年龄之间的差异,并根据此返回值对TreeMap进行排序。
因此,如果您使用((Person)t).age-age
作为返回值,那么它将按照其年龄的降序存储此人。