您的位置:首页 > 其它

hashCode散列码

2016-01-15 14:48 288 查看
基本数据类型包装类的散列码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: