刚才题目有误现在完善
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,所以两个对象不相等。