我正在开发一个 Java 程序。在程序中,有一个类,其字段中有一个整数数组。该类必须满足以下一项要求:
对于该类的两个实例,如果两个对应的整数数组至少包含一个公共(public)元素,则这两个类“相等”。否则,它们就不相等。
重写该类的“equals”方法来满足这个要求并不困难。然而,我在想出一个相应的哈希函数来覆盖 hashCode 方法时遇到了麻烦。有人对这个类的哈希函数有任何想法吗?谢谢。
最佳答案
根据javadoc for equals()
,它必须是*传递的:
for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
您建议的 equals()
实现将违反以下示例案例:
x
包含1
y
包含1
和2
z
包含2
所以即使x
“等于”y
和y
将“等于”z
,x
和 z
不会“相等”,因为不共享任何值。
因此,您的提案存在严重缺陷,您不应该实现它。
要回答您的问题,这是无法完成的,因为如果没有与实例进行比较的上下文,则无法确定 hashCode()
。
关于java - "Equal Arrays"的哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23986012/