gpt4 book ai didi

java - Java 中 String hashCode() 的旧实现中跳过字符背后的想法是什么

转载 作者:行者123 更新时间:2023-11-30 05:51:06 24 4
gpt4 key购买 nike

在旧版本的 Java String hashCode() 实现中从字符串中跳过一些字符的想法是什么:

public int hashCode() {
int hash = 0;
int skip = Math.max(1, length()/8);
for (int i = 0; i < length(); i += skip)
hash = (hash * 37) + charAt(i);
return hash;
}

当前版本中没有跳过,质数是 31 而不是 37

最佳答案

可能是为了加快 hashCode() 计算速度,但结果是它有更多潜在的冲突。
新版本有利于减少碰撞,但需要更多计算。

但事实上,String 是不可变的,因此在最新版本的 hashCode() 中,只计算一次:

public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
hash = h = isLatin1() ? StringLatin1.hashCode(value)
: StringUTF16.hashCode(value);
}
return h;
}

因此,在某种程度上,支持这种方式是有意义的,因为它减少了冲突次数,并且在 hashCode() 计算中不跳过某些字符并不那么昂贵,因为结果会被缓存。

关于java - Java 中 String hashCode() 的旧实现中跳过字符背后的想法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905381/

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