Java 如何为只包含对下一个节点的引用的节点实现HashCode()?
从代码中的注释来看,我的问题实际上是如何唯一地标识引用本身,就像C中的地址一样。这里不需要做什么,Java 如何为只包含对下一个节点的引用的节点实现HashCode()?,java,reference,hashcode,Java,Reference,Hashcode,从代码中的注释来看,我的问题实际上是如何唯一地标识引用本身,就像C中的地址一样。这里不需要做什么,节点已经有了一个默认实现,该实现根据它所在的内存位置返回一个哈希代码。如果希望节点的哈希代码表示它自己的引用,也就是说,如果没有覆盖equals(Object),那么就不需要覆盖哈希代码()没有问题 如果希望节点的哈希代码表示其下一个节点的引用,也就是说,如果等于(对象),则如下所示: public class Node { private Node nextNode; @Over
节点
已经有了一个默认实现,该实现根据它所在的内存位置返回一个哈希代码。如果希望节点
的哈希代码表示它自己的引用,也就是说,如果没有覆盖equals(Object)
,那么就不需要覆盖哈希代码()
没有问题
如果希望
节点
的哈希代码表示其下一个节点
的引用,也就是说,如果等于(对象)
,则如下所示:
public class Node {
private Node nextNode;
@Override
public int hashCode() {
//How to implement this?
//Because you just have a attribute which is a reference.
//I think the attribute is almost useless, because if you use the HashCode of the attribute, you will finally fall into a useless loop.
//Thus, I think you should find a way to represent the HashCode of reference (instance) itself.
}
}
-然后您可以使用:
我猜这应该是一个基类。如果是这样的话,就不用麻烦实现它了,因为只指向下一个节点的节点没有用,是吗?我猜,如果不扩展它,你永远不会使用它。也许可以将类抽象化以实现这一点?如果确实要重写hashcode,正确的声明是
public int hashcode(){}
谢谢!接受,因为提及1.“身份验证码”。HashCode和indentityHashCode之间的差异可以找到2.您是正确的Sun的SDK HashCode()方法的默认实现是一个返回值*,它将是对象的内存地址。
@Override
public boolean equals(Object that)
{
return ((that instanceof Node) && (nextNode == ((Node) that).nextNode));
}
@Override
public int hashCode()
{
return System.identityHashCode(nextNode);
}