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的方法直接转。
再对其进行long的操作。
对于float,同理转换成int的bit
最后对于String的散列码,是一种多项式求值的方法。
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
相关文章推荐
- SQL存储过程
- JVM学习笔记(三)---类加载器补充
- mysql学习(1):win_64位下载,安装,配置mysql-5-winx64详细步骤
- 如何使用 Docker、ECS、Terraform 重建基础架构?
- CRC校验算法及实现 C
- WdatePicker 日历控件使用方法+基本常用方法
- Swift中文教程(五)控制流
- Redis数据类型与基本操作
- JavaScript String 对象实例深入研究
- android 系统设置中的应用详情
- 如何在Java中分配超过-Xmx限制的内存
- 命令行操作ios
- 存储过程(自动备份数据)
- ALAsset和ALAssetRepresentation详解
- 从0自学C#01--自绘窗体边框
- java设计模式之适配器模式篇
- 设置屏幕背光不熄灭的方法
- java(12)--xml之dom方式的增删改查
- java通过HTTP访问:POST+GET
- Yii框架操作方法