Java树集排序

Java树集排序,java,Java,我从一本书中找到了这个问题,但很难找出答案背后的原因 public class Drink implements Comparable{ public String name ; public int compareTo(Object o){ return 0; } } 以及: 如果程序员迭代树集并打印每个饮料对象的名称,结果是什么 有人能帮我描述一下背后的原因吗 只有

我从一本书中找到了这个问题,但很难找出答案背后的原因

     public class Drink implements Comparable{

            public String name ;
            public int compareTo(Object o){
            return 0;
            }

        }
以及:

如果程序员迭代树集并打印每个饮料对象的名称,结果是什么

有人能帮我描述一下背后的原因吗

只有一个元素被添加到集合中,因为TreeSet根据compareTo返回相等值,并且由于元素已经在集合中,所以在尝试添加两个元素时不会发生任何情况

从java文档:

请注意,由集合维护的顺序无论是否为显式 提供的比较器必须与equals一致(如果需要) 正确实现Set接口。见可比比较器 对于与相等一致的精确定义。这是真的 因为Set接口是根据equals操作定义的, 但是TreeSet实例使用其 比较或比较方法,因此两个元素被认为相等 用这种方法,从集合的观点来看,是相等的。这个 即使集合的顺序不一致,集合的行为也是定义良好的 平等;它只是没有遵守集合的总合同 接口

。。。 如果此集合已经包含该元素,则调用将离开该集合 未更改并返回false


还要注意的是,这是不遵循Set接口约定的不明智行为,因为您没有覆盖equals。

停止懒惰。只需调试它。如果所有其他方法都失败了,那么看看Compariable是如何工作的,返回0是如何工作的。你能重复一下并让我们知道吗?在这种情况下,你实际上只是调用了返回0,因此每个元素都被认为是相等的,所以没有任何东西会改变,因为这是一个边缘情况,这是一个问题。如果这个案例没有定义,测试它可能什么也证明不了,如果是,要回答它,必须查阅文档。然而,在这种情况下,结果是完全确定的
    Drink one=new Drink();
    Drink two=new Drink();
    one.name="Coffee";
    two.name="Tea";
    TreeSet set=new TreeSet();
    set.add(one);
    set.add(two);