12
为什么Java的String中的hashCode()使用31作为乘数?
每Java文档中,哈希代码的String对象被计算为: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] 使用int算术,其中s[i]是 我字符串的个字符,n是字符串的长度,以及^表示取幂。 为什么将31用作乘数? 我知道乘数应该是一个相对较大的素数。那么为什么不29或37甚至97?
字符串是有限的符号序列,通常用于文本,尽管有时用于任意数据。