本文介绍了难道Java的Arrays.hash code散列code()实现均匀分布的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我检讨 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()实现均匀分布的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-30 14:01