问题描述
我检讨 Arrays.hash code源$ C $ C(的char [] C)
我不是很确定,它适用于良好的算法在所有情况下正常工作。
公共静态INT散列code(INT A []){
若(a == NULL)
返回0;
INT结果= 1;
对于(INT元素:一)
结果= 31 *结果+元素;
返回结果;
}
是否哈希函数实现在此真的很均匀地分布在所有的输入arrays.And为什么我们这里使用的黄金31。
为什么要使用质数31?
这可以被分成两部分?
在这里,我们要明白,我们的目标是获得一个唯一哈希code的对象,这将有助于我们找到为O(1)时间对象。
这里的关键词是唯一
在有效的Java 的
- 因为它是一个奇素数,而它的传统,使用的素数。
-
它也比二的幂,允许按位少了一个优化
下面是完整的报价,
这是一个非常的
I review the source code of Arrays.hashCode(char[] c)
I am not very confirm that the algorithm it applies well work well in all cases.
public static int hashCode(int a[]) {
if (a == null)
return 0;
int result = 1;
for (int element : a)
result = 31 * result + element;
return result;
}
Does the hash function implement here really uniformly distributes the all the input arrays.And Why we use prime 31 here .
Why use the prime number 31?
This can be split in two parts?
Here we need to understand that our goal is to get a unique HashCode for an object which will help us to find that object in O(1) time.
The key word here, is unique.
.
From Effective Java
- Because it's an odd prime, and it's "traditional" to use primes.
It's also one less than a power of two, which permits for bitwiseoptimization
Here's the full quote,
This is a very Good source.
这篇关于难道Java的Arrays.hash code散列code()实现均匀分布的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!