我正在研究Java程序。在程序中,有一个类在字段中具有整数数组。该课程必须满足以下一项要求:

对于此类的两个实例,如果两个对应的整数数组包含至少一个公共元素,则两个类别为“相等”。否则,它们是不相等的。

满足此类要求的覆盖类的“等于”方法并不困难。但是,我在想出相应的哈希函数来覆盖hashCode方法时遇到了麻烦。有人对此类的哈希函数有任何想法吗?谢谢。

最佳答案

根据javadoc for equals(),它必须是* transitive:


  对于任何非空参考值x,y和z,如果x.equals(y)返回true,而y.equals(z)返回true,则x.equals(z)应该返回true。


对于以下示例情况,您为equals()提议的实现将违反该实现:


x包含1
y包含12
z包含2


因此即使x将“等于” yy将“等于” zxz也将不是“等于”,因为它们没有共享任何值。

因此,您的建议存在严重缺陷,因此您不应该执行它。

要回答您的问题,这是不可能完成的,因为如果没有要与之进行比较的上下文,hashCode()是无法确定的。

关于java - “等于数组”的哈希函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23986012/

10-13 22:05