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

小小问题请高手指教。。。
import java.util.*;
public class K164 implements Comparable{
private String s;
public K164(String s){
this.s = s;
}
public static void main(String...abc){
HashSet<Object> hs = new HashSet<Object>();
K164 k1 = new K164("abc");
K164 k2 = new K164("abc");
String s1 = new String("abc");
String s2 = new String("abc");
hs.add(k1);
hs.add(k2);
hs.add(s1);
hs.add(s2);
System.out.println(hs.size());
System.out.println(k1.equals(k2));
}
public int compareTo(Object k){
return s.compareTo(((K164)k).s);
}
public int hushCode(){
return 1;
}
public boolean equals(Object o){
if((o instanceof K164)&&(((K164)o).s==this.s)){
return true;
}
else 
return false;
}
}

结果打印的是:3

我预期打印2。。。。
有些疑惑明明对K164这个类合法重写了hushCode()和equals()方法为什么在添加进集合的时候 还是认为k1和k2是相同的元素呢???


------解决方案--------------------
你太粗心了,把hashCode写成什么了,你看看:public int hushCode()改下就好了.
------解决方案--------------------
jf
------解决方案--------------------
((K164)o).s==this.s

...
------解决方案--------------------
添加进HashSet的三个是k1 k2和s1,s2其一