作者:萍子WYP | 来源:互联网 | 2023-01-10 21:14
经过研究,我仍然无法找到解决我问题的具体方案.我有一个使用epsilon的"近似等于"方法,而我的hashCode方法使用精确值.当我比较值时,这打破了HashSet的前提条件.
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof EPoint)) {
return false;
}
EPoint ePoint = (EPoint) o;
return Math.abs(Math.abs(ePoint.lat) - Math.abs(lat))
我找不到让hasCode()与我的equals方法一致的方法.
1> Alexey Roman..:
你equals
甚至在你到达之前就打破了合同,hashCode
因为它不是传递性的.
这也立即导致唯一一致的hashCode
实现是返回一个常量,因为任何两个点都有一个(非常长的)中间点链,所以
因此,每两个邻居都是平等的
每两个邻国必须具有相同的hashCode
,因此,
开头和结尾必须一样hashCode
.
现在,这是一个一致的实现,但显然是无用的.