通用对象的HashCode实现

时间:2018-05-17 07:40:23

标签: java generics methods hash

我有一个带有这个参数的Node类:

    public class Node < T > {
      private T value;
      private int priority;
    }

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

1 个答案:

答案 0 :(得分:1)

您应该将value.hashCode()priority值合并,以便计算Node hashCode()

例如:

@Override
public int hashCode()
{
    return 31 * value.hashCode() + priority;
}

这依赖于Node类的用户覆盖相关类中的hashCode()(用作Node值类型的类)。

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

相关问题