我正在研究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
包含1
和2
z
包含2
因此即使x
将“等于” y
和y
将“等于” z
,x
和z
也将不是“等于”,因为它们没有共享任何值。
因此,您的建议存在严重缺陷,因此您不应该执行它。
要回答您的问题,这是不可能完成的,因为如果没有要与之进行比较的上下文,hashCode()
是无法确定的。
关于java - “等于数组”的哈希函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23986012/