【发布时间】:2019-05-12 09:03:25
【问题描述】:
我正在尝试使用 HashSet,同时使用我自己的类“Inner”作为键类型,如下所示:
import java.util.HashSet;
class Inner {
int i;
String s;
public Inner(int i, String s) {
this.i = i;
this.s = s;
}
@Override
public int hashCode() {
return super.hashCode();
}
@Override
public boolean equals(Object o) {
Inner inner = (Inner) o;
return i == inner.i && s.equals(inner.s);
}
}
public class testEquals {
public static void main(String [] args) {
HashSet<Inner> hi = new HashSet<>();
hi.add(new Inner(1,"abc"));
System.out.println(hi.contains(new Inner(1,"abc")));
}
}
它打印“假”
(1) 我的问题是,只要我尝试使用“contains”函数,我必须从“Inner”类构造一个新对象来查询,但是因为它是一个新对象,所以 hashcode() 是不同的。所以我总是得到一个“错误”的“包含”功能。
(2) 如果我将 hashCode() 更改为在值相同时返回“true”,就像等于一样,那么在其他情况下,不同的对象引用被视为“==”,就像一个唯一的引用一样。
(1)和(2)似乎冲突。
如何解决?
谢谢!
【问题讨论】:
标签: java key equals hashset hashcode