Java “的哈希函数”;相等数组“;

Java “的哈希函数”;相等数组“;,java,hash,Java,Hash,我正在做一个Java程序。在程序中,有一个类在字段中有一个整数数组。该课程必须满足以下一项要求: 对于此类的两个实例,如果两个对应的整数数组至少包含一个公共元素,则这两个类“相等”。否则,他们就不平等了 覆盖此类的“equals”方法以满足此要求并不困难。但是,我很难找到一个相应的哈希函数来覆盖hashCode方法。有人知道这个类的哈希函数吗?谢谢。根据,它必须是*可传递的: 对于任何非空引用值x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equ

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

对于此类的两个实例,如果两个对应的整数数组至少包含一个公共元素,则这两个类“相等”。否则,他们就不平等了

覆盖此类的“equals”方法以满足此要求并不困难。但是,我很难找到一个相应的哈希函数来覆盖hashCode方法。有人知道这个类的哈希函数吗?谢谢。

根据,它必须是*可传递的:

对于任何非空引用值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()

根据,它必须是*可传递的:

对于任何非空引用值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()

根据,它必须是*可传递的:

对于任何非空引用值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()

根据,它必须是*可传递的:

对于任何非空引用值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()
将无法确定。

谢谢@Bohemian。我应该意识到“可传递性”问题。然后我将定义一个新方法来比较这个类,而不是覆盖equals()。谢谢@Bohemian。我应该意识到“可传递性”问题。然后我将定义一个新方法来比较这个类,而不是覆盖equals()。谢谢@Bohemian。我应该意识到“可传递性”问题。然后我将定义一个新方法来比较这个类,而不是覆盖equals()。谢谢@Bohemian。我应该意识到“可传递性”问题。然后我将定义一个新方法来比较这个类,而不是覆盖equals()。