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

Java 基于SortedSet中的compareTo()进行排序,java,Java,嗨,这是我从一本书中发现的一个问题。我不太清楚compareTo()方法中发生的事情。树集是一个排序类。那么它是否总是调用compareTo() 在compareTo()中,如何根据返回的年龄进行排序-((Person)0) PackageJavaApplication1; 导入java.util.NavigableSet; 导入java.util.SortedSet; 导入java.util.TreeSet; 公共类{ 公共静态void main(字符串参数[]){ NavigableSet

嗨,这是我从一本书中发现的一个问题。我不太清楚compareTo()方法中发生的事情。树集是一个排序类。那么它是否总是调用compareTo()

在compareTo()中,如何根据返回的年龄进行排序-((Person)0)

PackageJavaApplication1;
导入java.util.NavigableSet;
导入java.util.SortedSet;
导入java.util.TreeSet;
公共类{
公共静态void main(字符串参数[]){
NavigableSet s=新树集();

对于(int i=50;i如果仔细查看Java for
put
方法中的
TreeMap
类,则在添加到类中之前会对新对象进行比较

在映射中添加对象时,将使用在域类中实现的
compareTo
方法(仅供参考,TreeSet最终用于TreeMap以排序顺序存储对象)

任何修改操作最终都会调用“compareTo
方法对Map中的对象进行排序,并根据
compareTo`方法的结果存储对象

compareTo方法在您的案例中的作用:它将比较两个人的年龄,并返回他们年龄之间的差异,并根据此返回值对树状图进行排序


所以如果你使用
((Person)t).age age
作为返回值,然后它将按年龄降序存储人员。

它的可能重复项是通过相互减去来计算传入的
人员
对象的年龄与当前实例
人员
之间的差异严格来说,
比较方法是错。它溢出了
age
的大负值。虽然我认为人们不应该有大的负年龄…在什么时候比较()调用?是在将数据添加到树集的时刻吗?您了解什么是
TreeSet
吗?以及您将如何实现一个树集吗?这可能会回答您的问题。也许可以从阅读开始。这是不对的。对树的任何修改操作都可能导致特定的
比较方法正在调用ar对象,具体取决于该对象在树中的位置。感谢您的回复。此操作的输出为[Person(52)、Person(51)、Person(50)]。但当我将返回值更改为age-((Person)t)age时,输出更改为[Person(52)、Person(53)、Person(54)]。此更改是如何发生的。请解释。@Boristespider肯定是,
compareTo
method调用任何修改操作。我更新了答案。谢谢:)
    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+")";
        }

    }