JAVA HASH学习

就HASH的目的来说,是为了解决内容摘要与快速索引的问题;而其算法也比较多样。

JDK实现中,对String类的hashcode()进行了重载:

    public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

其中最重要的代码是:h = 31 * h + val[i];

为什么偏偏是31?不是29?不是37?更不是与之类似的127?

 

这篇文章说得有一定的意思,但是并未彻底解释清楚当初选31作为因子:http://donlianli.iteye.com/blog/1979674

下面的探讨也有一点参考意义:http://www.javamex.com/tutorials/collections/hash_function_technical_2.shtml

 

但终究还是没看到有任何文章彻底的解释清楚,为什么要选中31!

你可能感兴趣的:(JAVA HASH学习)