Java TreeSet排序

时间:2014-08-01 07:51:57

标签: java

我从一本书中发现了这个问题,但很难找出答案背后的方法。

     public class Drink implements Comparable{

            public String name ;
            public int compareTo(Object o){
            return 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);

如果程序员遍历TreeSet并打印每个Drink对象的名称,结果是什么?

有人可以通过描述背后的方式帮助我得到答案。

1 个答案:

答案 0 :(得分:4)

只有“Coffee”(one)被添加到集合中,因为TreeSet根据compareTo()返回相等,并且因为元素已经在集合中,所以当您尝试时会发生注意添加two

来自java docs:

TreeSet:

  

注意由一组维护的排序(无论是否显式   比较器提供)必须与equals一致,如果是的话   正确实现Set接口。 (参见可比较者或比较者   对于与equals一致的精确定义。)就是这样   因为Set接口是根据equals操作定义的,   但是TreeSet实例使用它执行所有元素比较   compareTo(或compare)方法,因此两个被认为相等的元素   从该集合的角度来看,通过这种方法是相等的。该   集合的行为即使其排序不一致也是明确定义的   与...平等它只是没有遵守集合的一般合同   接口

add():

  

...   如果此集合已包含该元素,则该调用将离开该集合   不变并返回false。


另请注意,这是未遵循Set接口合同的未经修改的行为,因为您未覆盖equals()