我从一本书中发现了这个问题,但很难找出答案背后的方法。
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对象的名称,结果是什么?
有人可以通过描述背后的方式帮助我得到答案。
答案 0 :(得分:4)
只有“Coffee”(one
)被添加到集合中,因为TreeSet根据compareTo()
返回相等,并且因为元素已经在集合中,所以当您尝试时会发生注意添加two
。
来自java docs:
注意由一组维护的排序(无论是否显式 比较器提供)必须与equals一致,如果是的话 正确实现Set接口。 (参见可比较者或比较者 对于与equals一致的精确定义。)就是这样 因为Set接口是根据equals操作定义的, 但是TreeSet实例使用它执行所有元素比较 compareTo(或compare)方法,因此两个被认为相等的元素 从该集合的角度来看,通过这种方法是相等的。该 集合的行为即使其排序不一致也是明确定义的 与...平等它只是没有遵守集合的一般合同 接口
... 如果此集合已包含该元素,则该调用将离开该集合 不变并返回false。
另请注意,这是未遵循Set
接口合同的未经修改的行为,因为您未覆盖equals()
。