gpt4 book ai didi

java - 不一致的哈希码和等于 java

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:52 25 4
gpt4 key购买 nike

经过研究,我仍然找不到针对我的问题的具体解决方案。我有一个使用 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)) < EPSILON && Math.abs(Math.abs(ePoint.lon) - Math.abs(lon)) < EPSILON;
}

@Override
public int hashCode() {
return Objects.hash(lat, lon);
}

我找不到使 hasCode() 与我的 equals 方法一致的方法。

最佳答案

您的 equals 本身甚至在您到达 hashCode 之前就违反了约定,因为它不是可传递的。

这也立即导致唯一一致的 hashCode 实现返回一个常量,因为对于任何两个点都有一个(很长的)中间点链,因此

  1. 每两个邻居都相等,因此

  2. 每两个邻居必须有相同的hashCode,因此

  3. 开头和结尾必须有相同的hashCode

现在,这是一个一致的实现,但很明显是一个无用的实现。

关于java - 不一致的哈希码和等于 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47016280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com