为了账号安全,请及时绑定邮箱和手机立即绑定

需要证明/分解字符串.哈希码()方法在java中

需要证明/分解字符串.哈希码()方法在java中

温温酱 2022-09-28 14:27:42
我知道字符串.hashCode()方法采用的公式如下:S0x31(n-1)+s1x31(n-2)+…+s(n-1)在我的教科书中,我举了“猫”这个词的例子。'C'  x31^2 + 'a' x 31 +t最终值的给定方式为67,510我对这个值的来源感到非常困惑,特别是,用于单个字符的值。我尝试了37,66和85(分别使用大写C,小写a和t的Unicode字符)。这是无效的。有人可以为我照亮这个吗?遗憾的是,这是我的教科书给出的唯一例子,没有试图澄清或解释它。
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

67 * 31^2 + 97 * 31^1 + 116 * 31^0 = 
67 * 31^2 + 97 * 31 + 116 = 
64387 + 3007 + 116 = 
67510

从 http://www.asciitable.com/ 中获取67,97和116


查看完整回答
反对 回复 2022-09-28
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

字符串哈希代码执行以下操作:


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;

}

因此,基本上每次迭代都会将现有哈希值乘以31,然后将下一个值添加到哈希值中。


所以当“C”= 67,“a”= 97,“t”= 116时,你得到:


h = 0

h *= 31;

h += 67; // 'C'   


h *= 31;

h += 97; // 'a'


h *= 31;

h += 116;


h ==> 67510


查看完整回答
反对 回复 2022-09-28
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号