我有以下代码:
public class MyElement {
String name;
String type;
MyElement(String name, String type) {
this.name = name;
this.type = type;
}
}
public class Test {
public static void main(String[] args) {
Set<MyElement> set = new HashSet<MyElement>();
set.add(new MyElement("foo", "bar"));
set.add(new MyElement("foo", "bar"));
set.add(new MyElement("foo", "bar"));
System.out.println(set.size());
System.out.println(set.contains(new MyElement("foo", "bar")));
}
}
Run Code Online (Sandbox Code Playgroud)
执行时返回:
3
false
Run Code Online (Sandbox Code Playgroud)
我原以为结果是1而且是真的.为什么我的元素不被认为是相同的,我该如何纠正?谢谢,韦恩.
小智 12
您需要根据一般合同在MyElement 上实施equals(Object o)和实施hashCode().缺席Set.contains()将使用比较对象的内存地址的默认实现.由于您在包含调用中创建了一个新的MyElement实例,因此它返回false.
| 归档时间: |
|
| 查看次数: |
4258 次 |
| 最近记录: |