JAVA中String类的hashCode方法

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;
}

String类的hashCode计算方法比较简单,以31为权,每一位为字符的ASCII值进行运算,用自然溢出来等效取模。
哈希计算公式可以计为s[0]*31^(n-1)+s[1]^31(n-2)+…+s[n-1]
关于为什么取31为权,可以参考StackOverflow上的这个链接
主要因为31是一个奇质数,所以31*i=32*i-i=(i<<5)-i,这种位移与剑法结合的计算相比一般的运算快很多。

猜你喜欢

转载自blog.csdn.net/ecliiipse/article/details/61920167