java中哈希函数统计字符串_java – 一个好的哈希函数,用于访问整数,字符串?

这是

Effective java page 33的简单食谱:

>在一个称为result的int变量中存储一些常量的非零值,例如17.

>对于您对象中的每个重要字段f(每个字段由…所考虑

equals方法,即),执行以下操作:

>

计算字段的int哈希码c:

>如果该字段是一个布尔值,则计算(f?1:0).

>如果字段是一个字节,char,short或int,则compute(int)f.

>如果字段长,compute(int)(f ^(f>>> 32)).

>如果该字段是浮点数,则计算Float.floatToIntBits(f).

>如果字段是双精度,则计算Double.doubleToLongBits(f)和

然后如步骤2.1.iii中的哈希结果长.

>如果该字段是一个对象引用和该类的equals方法

通过递归地递归调用equals比较该字段

在字段上调用hashCode.如果比较复杂的话

需要,计算这个字段的“规范表示”

在规范表示上调用hashCode.如果值的话

字段为null,返回0(或其他一些常量,但是0是传统的).

所有对象共同的方法

>如果该字段是数组,则将其视为每个元素都是单独的字段.

也就是说,通过应用来计算每个有效元素的哈希码

这些规则是递归的,并且每个步骤2.b组合这些值.如果每一个

元素中的数组域很重要,可以使用其中的一个

在版本1.5中添加的Arrays.hashCode方法.

>将步骤2.1中计算的哈希码c与以下结果相结合:

result = 31 * result c;

>返回结果.>完成编写hashCode方法后,问问自己相等的实例具有相等的哈希码.编写单元测试来验证你的直觉!如果相等的实例具有不等的哈希码,可以弄清楚为什么并解决问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值