天天看点

Java如何计算hashcode值

在设计一个类的时候,很可能需要重写类的hashcode()方法,此外,在集合hashset的使用上,我们也需要重写hashcode方法来判断集合元素是否相等。

下面给出重写hashcode()方法的基本规则:

· 在程序运行过程中,同一个对象多次调用hashcode()方法应该返回相同的值。

· 当两个对象通过equals()方法比较返回true时,则两个对象的hashcode()方法返回相等的值。

· 对象用作equals()方法比较标准的field,都应该用来计算hashcode值。

下面给出hashcode()方法的一般规则:

1) 把对象内每个有意义的field计算出一个int类型的hashcode值:

boolean

hashcode=(f?0:1)

整数类型(byte  short   int  char)

hashcode=(int)f

long

hashcode=(int)(f^(f>>>32))

float

hashcode=float.floattointbits(f)

double

long l = double.doubletolongbits(f);

hashcode=(int)(l^(l>>>32))

普通引用类型

hashcode=f.hashcode()

2) 用第一步计算出来的多个hashcode值组合计算出一个hashcode值返回:

为了避免直接相加产生偶然相等,可以通过为各个field乘以任意一个质数后再相加。

示例: 向hashset集合中添加数据:

通过以上方式,我们可以轻松的去重写一个类的hashcode()方法。