Java 通用对象的HashCode实现

Java 通用对象的HashCode实现,java,generics,methods,hash,Java,Generics,Methods,Hash,我有一个具有以下参数的节点类: public class Node < T > { private T value; private int priority; } 公共类节点{ 私人T值; 私人优先权; } 我知道我需要重写hashcode方法,但我不知道如何做,因为value是一个通用对象。我了解到可以通过使用对象的地址来完成,但不建议这样做,因为JVM可以在程序执行期间更改对象的地址。您应该将value.hashCode()与优先级值

我有一个具有以下参数的节点类:

    public class Node < T > {
      private T value;
      private int priority;
    }
公共类节点{
私人T值;
私人优先权;
}

我知道我需要重写hashcode方法,但我不知道如何做,因为
value
是一个通用对象。我了解到可以通过使用对象的地址来完成,但不建议这样做,因为JVM可以在程序执行期间更改对象的地址。

您应该将
value.hashCode()
优先级
值结合起来,以便计算
节点的
hashCode()

例如:

@Override
public int hashCode()
{
    return 31 * value.hashCode() + priority;
}
这取决于
节点
类的用户在相关类(用作
节点
值类型的类)中重写
hashCode()


注意,这是JDK集合类实现hashCode的方式。例如,
Set
s的
hashCode()
的默认实现是
Set
元素的
hashCode()
s之和

即使变量的地址在执行过程中可能会更改,使用value.hashCode()是否正确?@JimBelushi2执行过程中
value.hashCode()
是否会更改与地址无关。它与
value
的运行时类型及其类的
hashCode()
实现有关。或者换句话说,对象的默认
hashCode
(也称为its
identityHashCode
)的值永远不会更改,即使对象的地址更改也是如此。