重写hashCode()的方法

重写hashCode()方法的基本规则:

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

2、当两个对象通过equals()方法比较返回true时,这两个对象的hashCode()方法返回的值也应该相等

3、对象中用作equals()方法比较标准的Field,都应该用来计算hashCode值

 

重写hashCode()方法的一般规则:

1、把对象内每个有意义的Field计算出一个int类型的hashCode值,计算方式如下:

Field类型 计算方式
boolean hashCode=(f ? 0 : 1);
整数类型(byte,short,char,int) 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值返回,如:

1 return f1.hashCode()+(int)f2;

为了避免直接相加产生偶然相等,可以通过为个Field乘以任意一个质数后相加,如:

1 return f1.hashCode()*17+(int)f2*13;

 

posted @ 2013-10-04 23:43  WahsonLeung  阅读(497)  评论(0编辑  收藏  举报