hashCode散列码

来源:互联网 发布:通话变音软件 编辑:程序博客网 时间:2024/05/22 14:14

基本数据类型包装类的散列码:
byte、char、short等就是转换成int值
long是64位的,而int是32位的,直接转换会丢弃数据。
java中采用value^(value>>32)得到long转换的散列码
举个例子:
10101100 右移四位后00001010 成功将低四位值去除,
再将两个值的低四位异或(也就是原高四位与原低四位异或),低四位变为0110,从而利用到了所有位数。
因此,虽然结果有64位,但移位后的两半都在低32位中,
此时转换成32位的int,可以直接丢弃高32位的值。
对于double64位,由于有小数点,不能用long的方法直接转。

Double.doubleToLongBits(value)

再对其进行long的操作。
对于float,同理转换成int的bit

最后对于String的散列码,是一种多项式求值的方法。

((u1*g+u2)*g+u3)*g+...代码表示为:for (int i = offset; i < end; ++i) {                hash = 31*hash + chars[i];            }java中g取31
0 0
原创粉丝点击