gpt4 book ai didi

java - 有理数的哈希码

转载 作者:行者123 更新时间:2023-11-29 07:14:54 27 4
gpt4 key购买 nike

我已经在 java 中实现了一个类来模拟有理数,它有两个整数来模拟分子和分母。我需要重写Object的hashcode方法,所以相同的数字有相同的hash code。

我已经这样定义了我的 equals() 方法:

public boolean equals(Object obj) {
Racional r = null;
if (obj instanceof Racional) {
r = (Racional) obj;
} else {
return false;
}
return r.getDenominador() * this.numerador == r.getNumerador() * this.denominador;
}

关于这个:

返回分子 * 分母是个好方法吗?

等效的有理数(如 1/4 和 2/8)是否应该返回相同的哈希码?

最佳答案

这完全取决于您如何实现equals 方法。如果 obj1.equals(obj2)true,则 obj1.hashCode() == obj2.hashCode() 也应为 true 。我可能只使用 new Double((double) numerator/denominator).hashCode() 作为我的散列,但您的要求可能不允许这样做。

/编辑
考虑到您的 equals 方法,使用 numerator * denominator 作为您的散列将是一种无效的方法。使用您的 1/42/8 示例,1/4.equals(2/8) 将返回 true,但是 1/4.hashCode() == 2/8.hashCode() 将计算为 4 == 16,并返回 false.

关于java - 有理数的哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10471717/

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