我在为以下示例弄清楚如何实现有效的哈希码时遇到了一些麻烦:
我有2节课:
Class A
{
}
Class B
{
protected List<A> constitutingObjects;
}
已经覆盖相等,因此如果A是B.constitutingObects的一部分,则对象A等于对象B。
我的问题是我不确定如何实现此哈希码。
有任何想法吗 ?
谢谢。
最佳答案
TL; DR:您尝试执行的操作没有任何意义。退后一步,尝试以另一种方式解决更大的任务。
已经覆盖相等,因此如果A是B的一部分,则A类等于B类。
听起来这是一个非常糟糕的主意。很难说出这些对象是什么意思,但是包含集合的东西在逻辑上并不等于该集合的元素-购物清单不等于“牛奶”。
不要忘记,您必须遵循java.lang.Object
文档指定的要求。许多其他代码将取决于这些保证。
除非您只返回一个常数,否则基本上不可能实现hashCode
。两个相等对象的哈希码必须相等,这意味着ClassB
的任何实例的哈希码必须等于constitutingObjects
的每个元素的哈希码,这意味着所有这些元素都必须具有具有相同的哈希码。除非ClassA
实例以某种方式“知道”其容器是什么,否则我不知道这怎么可能。
关于java - Java中的哈希码实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12077385/