gpt4 book ai didi

java - Java 中通用对象的哈希码

转载 作者:行者123 更新时间:2023-11-30 08:34:50 24 4
gpt4 key购买 nike

我理解 hashCode 的概念以及为什么需要它。但是,我对如何为通用对象计算 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 为此生成了一个自动 hashCode 函数,

@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 和 Value 是通用的,key.hashCode() 有什么作用?这种方法是如何工作的?

最佳答案

KV是你的 Node 的参数化类型目的。

因此,hashCode将在实际类型上调用。

例如 Node<String, Integer>会有String#hashCodeInteger#hashCode分别调用。

如果您使用自定义对象对其进行参数化,可以是他们自己的 hashCode 实现或他们 parent 对 hashCode 的实现将被调用,直到 Object#hashCode ,这是一个本地(即依赖于平台)的实现。

关于java - Java 中通用对象的哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com