我已经尝试了一切.即使是java的论坛:
java.lang.String.hashCode():
s[0]*(31^(n-1)) + s[1]*(31^(n-2)) + ... + s[n-1]
Run Code Online (Sandbox Code Playgroud)
我把它解释为一个总和:虽然我不太清楚如何处理s [n-1];
int hashmap::hashstr( const char*const str )
{
int result = 0;
int i = 0;
int j = 0;
int k = 0;
unsigned n = 0;
for ( ; str[n] != NULL; ++n ); // how many characters?
while ( j != n ) // no more characters
{
result += str[i] * ( 31 ^ ( n - k ) );
j++;
i++;
k++;
}
return result % maxSize;
}
Run Code Online (Sandbox Code Playgroud)
其中maxSize是我的固定数组大小为11的第10个元素.
我究竟做错了什么?我的一些哈希指标出错了.其他人,正确.为什么是这样?到目前为止,每个人都喜欢,"谁在乎它的运作方式!使用模板!" 好吧,我想明白这个..
s[0](31^(n-1)) + s[1](31^(n-2)) + ... + s[n-1]
Run Code Online (Sandbox Code Playgroud)
在公式中^表示取幂,而不是按位xor运算.
看看这个问题.
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |