首页 > 其他 > 详细

HashCode()函数详解

时间:2018-05-13 17:43:47      阅读:189      评论:0      收藏:0      [点我收藏+]

Interger

    public static int hashCode(int value) {
        return value;
    }

Interger类型数据的hashcode仅仅是返回其原有的值

Double

    public static int hashCode(double value) {
        long bits = doubleToLongBits(value);
        return (int)(bits ^ (bits >>> 32));
    }

bits是双精度规格化浮点数的二进制
Double类的数据的hashcode是返回bits右移32位然后与bits相异或的结果

浮点数的表示

技术分享图片
最高位是符号位(0为正,1为负)
其后的11位是阶码位以2为底,用移码表示,移码的偏置量是2^(11-1)-1=1023,
后52位是尾数的数值位。

例:浮点数是9.0

写成二进制则为1001,也可写成1.001×2^3.
符号位为0
浮点数的阶码为3+1023=1026=10000000010
数值位默认删除第一位整数位的1,只保留小数点后的数。为00100000补够后面的零
所以9.0的表示就是
0 
10000000010
0010000000000000000000000000000000000000000000000000

异或

当两个数不同时为1,相同时为0

0∧0=0,0∧1=1,1∧1=0,1∧0=1

String

    public static int hashCode(byte[] value) {
        int h = 0;
        int length = value.length >> 1;
        for (int i = 0; i < length; i++) {
            h = 31 * h + getChar(value, i);
        }
        return h;

byte[] value传过来的是String每一个字符转成ascii码后的数组.
至于为什么选择31作为乘子,可以看 这篇文章

HashCode()函数详解

原文:https://www.cnblogs.com/INnoVationv2/p/9032681.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!