计算hashCode通用计算公式

Posted zslm___

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算hashCode通用计算公式相关的知识,希望对你有一定的参考价值。

1

@Override
    public int hashCode() {
        //设置初始值
        int result = 17;

        //假设有效域为: name,age,idCardNo,incomeAnnual,sex,brithDay
        int c = 0;
        //计算name (String为对象类型,他的计算直接调用本身的hashCode)
        c = name.hashCode();
        result = result * 37 + c;

        //计算age (int/byte/char/short类型,他的计算直接调用本身的值)
        c = this.getAge();
        result = result * 37 + c;

        //计算idCardNo (long类型,他的计算 (int)(field^(field >>> 32)) 无符号右移32位)
        c = (int) (this.idCardNo ^ (this.idCardNo >>> 32));
        result = result * 37 + c;

        //计算 incomeAnnual (double类型,他的计算 Double.doubleToLongBits(field)后,再按Long类型计算 )
        //(float类型,他的计算 Float.floatToIntBits(field)  )
        long tmp = Double.doubleToLongBits(this.incomeAnnual);
        c = (int) (tmp ^ (tmp >>> 32));
        result = result * 37 + c;

        //计算 sex (sex为boolean类型,他的计算直接调用 c=sex?1:0)
        c = this.isSex() ? 1 : 0;
        result = result * 37 + c;

        //计算 brithDay (brithDay为Date对象类型,他的计算直接调用 本身的hashCode)
        c = this.getBirthDay().hashCode();
        result = result * 37 + c;

        return result;
    }

 

以上是关于计算hashCode通用计算公式的主要内容,如果未能解决你的问题,请参考以下文章

Object.hashCode() 算法

hashCode()与 equals() 之间的关系

贝塞尔曲线 WPF MVVM N阶实现 公式详解+源代码下载

计算任意一天是星期几

Java中hashcode的计算方式

Java中hashcode的计算方式