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中的地址。
答案 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);
}