各位大虾,看看这个下面的源代码.import java.util.ArrayList;
import java.util.HashSet;public 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;
}
}
public static void main(String[] args) {
ArrayList list = new ArrayList();
HashSet set = new HashSet();
list.add(new Foo(1));
set.add(new Foo(1));
System.out.println(list.contains(new Foo(1)));
System.out.println(set.contains(new Foo(1)));
}
}
}这是LIST的contains的API:
如果列表包含指定的元素,则返回 true。更确切地讲,当且仅当列表包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时才返回 true。
这是SET的contains的API:
如果 set 包含指定的元素,则返回 true。更确切地讲,当且仅当 set 包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时返回 true。
我的问题是为什么第一个输出 TRUE,第二个输出FALSE.
请教……
import java.util.HashSet;public 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;
}
}
public static void main(String[] args) {
ArrayList list = new ArrayList();
HashSet set = new HashSet();
list.add(new Foo(1));
set.add(new Foo(1));
System.out.println(list.contains(new Foo(1)));
System.out.println(set.contains(new Foo(1)));
}
}
}这是LIST的contains的API:
如果列表包含指定的元素,则返回 true。更确切地讲,当且仅当列表包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时才返回 true。
这是SET的contains的API:
如果 set 包含指定的元素,则返回 true。更确切地讲,当且仅当 set 包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时返回 true。
我的问题是为什么第一个输出 TRUE,第二个输出FALSE.
请教……
list.add(new Foo(1));
Foo f = new Foo(1);
set.add(f);
System.out.println(list.contains(new Foo(1)));
System.out.println(set.contains(f));
这个时候2个就是true了
return new Integer(value).hashCode();
}要重写hashCode的,如果equal为true的话,那么hashcode必须相等。