我已经创建了一个名为Coordinates
的类,它只保留一些x
和y
整数。我想用这个作为HashMap
的关键。创建可用作散列映射关键字的Java类
不过,我注意到,当你创建的Coordinates
两个不同的实例具有相同x
和y
值,它们被用作通过散列图不同的密钥。也就是说,即使它们都具有相同的坐标,也可以放入两个条目。
我已经重写equals()
:
public boolean equals(Object obj) {
if (!(obj instanceof Coord)) {
return false;
}else if (obj == this) {
return true;
}
Coord other = (Coord)obj;
return (x == other.x && y == other.y);
}
但HashMap
仍然采用了两个实例,好像他们是不同的密钥。我该怎么办?
而且我知道我可以用两个元素的整数数组来代替。但我想用这个班。
你重写了'hashcode'吗? –
@邹邹哦,不,我不知道。我看到它返回一个整数。我应该返回什么?当然,这不是x和y的总和。 – Voldemort
你需要保持一致。如果a等于b,则a.hashcode == b.hashcode。另请参见http://stackoverflow.com/questions/27581/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in-java –