日期:2014-05-20  浏览次数:20719 次

为什么答案是A呢? 可以解释一下吗?
public   class   Drink   implements   Comparable{
public   String   name;
public   int   compareTo(Object   o){
return   0;
}

and:

Drink   one=new   Drink();
Drink   two=new   Drink();
one.name= "Coffee ";
two.name= "Tea ";
TreeSet   set=new   TreeSet();
set.add(one);
set.add(two);

A   programmer   iterates   over   the   TreeSet   and   prints   the   name   of   each   Drink   object.

what   is   the   rusult?

A   Tea
B.Coffe
C.Coffe
      Tea
D.Compilation   fails.
E.the   code   runs   with   no   output
F.An   exception   is   thrown   at   runtime


------解决方案--------------------
public int compareTo(Object o){
return 0;
}
compareTo()返回0,表示两个对象相同.
Set中不允许存在相同/重复的对象,后set()的对象如果和之前set()的对象相同(通过compareTo比较),那么将覆盖原来的对象
所以Set中实际上只有一个Drink的实例,就是Tea.
因此选A
------解决方案--------------------
看了半天觉得这题目怪怪的.只能靠自己的理解了.

在实现 Comparable接口后再重写compareTo(Object o)

因为compareTo方法只有一个返回就是0.那就是无论如何都是会让这两个值相等.

如果是sort方法排序这两个对象的话,那肯定这两个对象是相等的.

我自己的理解是推广而言,那这里就是两者相等了...偶也说不清楚..觉得有点迷糊.关键应该是在compareTo里.可能是把前者和后者比较,因为返回的肯定是0.两者肯定相等,那前者就被等于了后者....有点感觉像是在凑答案

------解决方案--------------------
学习
------解决方案--------------------
楼上的诸位,你们确定这个题选A,而不是B吗?
------解决方案--------------------
sey不是要保证不能有相同的元素啊..
它是根据compareTo()来判断还是根据equals()来判断的啊..!!!!

我运行过了,答案是B
------解决方案--------------------
应该是b,add(one)起作用,add(two)的时候,经过判断,就不会加进去了应该!!所以用迭代器的时候,只有第一次加进去的!!!!
------解决方案--------------------
是A
------解决方案--------------------
应该是A。因为TreeSet的内部是由一个TreeMap来支持的,该TreeMap的Key就是TreeSet的元素。调用TreeSet的add()函数其实相当于调用TreeMap的put()函数。而put函数会将以前的值替换掉(如果有重复的话)。
------解决方案--------------------
A, 学习一下。