Как реализовать HashCode () для узла, содержащего только ссылку на следующий узел? - PullRequest
2 голосов
/ 20 марта 2012
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 ]

9 голосов
/ 20 марта 2012

Здесь ничего не нужно делать, Node уже имеет реализацию по умолчанию, которая возвращает хеш-код в зависимости от места в памяти, в котором он находится.

2 голосов
/ 20 марта 2012

Если вы хотите, чтобы хеш-код Node представлял его собственную ссылку & mdash; то есть, если вы не переопределяете equals(Object) & mdash; тогда вам вообще не нужно переопределять hashCode().

Если вы хотите, чтобы хеш-код Node представлял ссылку на его nextNode & mdash; то есть, если ваш equals(Object) выглядит примерно так:

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

& mdash; тогда вы можете использовать служебный метод JDK System.identityHashCode(Object) :

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