基于SortedSet中的compareTo()进行排序

时间:2014-06-30 06:36:05

标签: java

嗨,这是我从一本书中发现的一个问题。我不完全清楚在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+")";
        }

    }

1 个答案:

答案 0 :(得分:0)

如果仔细查看Java中的TreeMapput方法,则在添加类之前会对新对象进行比较。

Check this

在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作为返回值,那么它将按照其年龄的降序存储此人。