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

刚才题目有误现在完善
public static void main(String[] args) {
ArrayList<Foo> list = new ArrayList<Foo>();
Set<Foo> set = new HashSet<Foo>();
list.add(new Foo(1));
set.add(new Foo(1));
System.out.println(list.contains(new Foo(1))+","+set.contains(new Foo(1)));


}

}
class Foo{
int value ;
Foo(int value){
this.value = value;
}
public boolean equals(Object obj){
if(obj instanceof Foo){
Foo foo = (Foo)obj;
return value == foo.value;
}
else return false;
}
}
刚才写的这题有误!题目不完善!现在题目完整了!问题还是刚才的问题!求解!谢谢!

------解决方案--------------------
set是不允许重复的,因为它采用的是键值对的存储模式
------解决方案--------------------
+set.contains(new Foo(1)));
主要问题不是你没有写equals的问题,主要问题是你没有复写 hashcode方法,
set除了判断equals之外,还需要判断hashcode,是首先判断hashcode,再判断equals

而list只判断euqals

你没有复写hashcode,所以两个对象不相等。