Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的hashcode实现_Java_Hashcode - Fatal编程技术网

java中的hashcode实现

java中的hashcode实现,java,hashcode,Java,Hashcode,对于下面的示例,我很难理解如何实现一个有效的哈希代码: 我有两门课: Class A { } Class B { protected List<A> constitutingObjects; } A类 { } B类 { 受保护的物品清单; } 已重写equal,因此如果A是B的一部分,则对象A等于对象B。 我遇到的问题是,我不知道如何实现这个Hashcode 有什么想法吗 谢谢。在Java中定义equals和hashCode时,您不是在测试两个类是否相等,而是在测试相

对于下面的示例,我很难理解如何实现一个有效的哈希代码:

我有两门课:

Class A
{
} 

Class B 
{
  protected List<A> constitutingObjects;
}
A类
{
} 
B类
{
受保护的物品清单;
}
已重写equal,因此如果A是B的一部分,则对象A等于对象B。 我遇到的问题是,我不知道如何实现这个Hashcode

有什么想法吗


谢谢。

在Java中定义
equals
hashCode
时,您不是在测试两个类是否相等,而是在测试相同类型(类)的两个对象是否可以相等,根据
equals
方法,或者它们可以位于相同的“bucket”(逻辑对象组)中根据
hashCode

因此,如果x和y是两个类型为A的对象:

A x = new A();
A y = new A();
  • 如果
    x.equals(b)
    为真,则
    x.hashCode()
    必须等于
    y.hashCode()
  • 如果
    x.hashCode()==y.hashCode()
    x.equals(y)
    可能为真或假

    • TL;医生:你想做的没有意义。退一步,试着用不同的方式处理你更大的任务

      已重写equal,因此如果A是B的一部分,则A类等于B类

      这听起来是个很糟糕的主意。很难说这些对象是用来表示什么的,但是包含集合的东西在逻辑上并不等于集合的元素——购物清单并不等于“牛奶”

      不要忘记,您必须遵守文档中指定的要求。许多其他代码将依赖于这些保证


      除非您只返回一个常量,否则实现
      hashCode
      基本上是不可能的。两个相等对象的哈希代码必须相等,这意味着
      ClassB
      的任何实例的哈希代码必须等于
      构成对象的每个元素的哈希代码,这意味着所有这些元素都必须具有相同的哈希代码。除非
      ClassA
      的实例以某种方式“知道”它们的容器是什么,否则我不认为这是可能的。

      在代码片段中定义了两个类,但在文本中提到了两个对象。我仍然看不到一个有效的问题。我想问题实际上是到了这种情况。谢谢你的回答