私はhashCodeのアイデアとその必要性を理解しています。しかし、私は、Genericオブジェクトに対してhashCodeがどのように計算されるのか混乱しています。だから私の質問です。私は文字列をしている場合、私はおそらくJavaの汎用オブジェクト用のHashCode
int hash = 7;
for (int i = 0; i < strlen; i++) {
hash = hash*31 + charAt(i);
}
、ハッシュコードを計算するには、次の機能を使用しかし、私は次のオブジェクトをしたと言うだろう、
class Node<K, V> {
private K key;
private V value;
private Node<K, V> next;
}
私のIDEは、自動化されたハッシュコード関数を生成しますこのため、
@Override
public int hashCode() {
int result = key != null ? key.hashCode() : 0;
result = 31 * result + (value != null ? value.hashCode() : 0);
result = 31 * result + (next != null ? next.hashCode() : 0);
return result;
}
私の質問は、キーと値は一般的なものであるため、key.hashCode()
は何をするんでしょうか? このメソッドはどのように機能しますか?
'key.hashCode()'は多態性を使用して、 'key 'を実装したクラスに与えた実装を呼び出します。 –
汎用オブジェクトのようなものはありません。ある特定のタイプのオブジェクトを参照するために使うことができるジェネリック*タイプ*があります。すべてのオブジェクトが 'Object'のインスタンスであるため、必ず' hashCode() 'メソッドを持ちます。 – shmosel