如何为仅包含对下一个节点的引用的节点实现HashCode()?

时间:2012-03-20 17:54:23

标签: java reference hashcode

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.
    }
}

从代码中的注释,我的问题实际上是如何唯一地标识引用本身,如C中的地址。

2 个答案:

答案 0 :(得分:9)

这里没有你需要做的事情,Node已经有了默认的实现,它根据它所在的内存位置返回一个哈希码。

答案 1 :(得分:2)

如果您希望Node的哈希码代表其拥有的引用 - 也就是说,如果您没有覆盖equals(Object) - 那么您就不会需要覆盖hashCode()

如果您希望Node的哈希码代表其nextNode的引用 - 也就是说,如果您的equals(Object)看起来像这样:

@Override
public boolean equals(Object that)
{
    return ((that instanceof Node) && (nextNode == ((Node) that).nextNode));
}

- 然后您可以使用the JDK's System.identityHashCode(Object) utility method

@Override
public int hashCode()
{
    return System.identityHashCode(nextNode);
}