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);