我在为以下示例弄清楚如何实现有效的哈希码时遇到了一些麻烦:

我有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/

10-10 17:14