这个问题已经在这里有一个答案:
- 哪些问题应该在Java中覆盖equals和hashCode时,应考虑? 11个回答
我做了这个测试在一个HashSet对比和equals
不会被调用
我想考虑等于当遥远= FALSE(A功能检查两个点的距离)
全编译代码,你可以测试它,并告诉为什么等于不会被调用在这个例子中。
public class TestClass{
static class Posicion
{
private int x;
private int y;
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Posicion other = (Posicion) obj;
if ( farAway(this.x, other.x, this.y, other.y,5)){
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7; hash = 59 * hash + this.x; hash = 59 * hash + this.y;
return hash;
}
Posicion(int x0, int y0) {
x=x0;
y=y0;
}
private boolean farAway(int x, int x0, int y, int y0, int i) {
return false;
}
}
public static void main(String[] args) {
HashSet<Posicion> test=new HashSet<>();
System.out.println("result:"+test.add(new Posicion(1,1)));
System.out.println("result:"+test.add(new Posicion(1,2)));
}
}
编辑
-is有没有办法迫使HashSet的添加叫平等?