首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

怎么重写hashcode

2012-09-02 
如何重写hashcode为什么要重写hashCode方法? 我们应该先了解java判断两个对象是否相等的规则。 在java的集

如何重写hashcode
为什么要重写hashCode方法?



我们应该先了解java判断两个对象是否相等的规则。



在java的集合中,判断两个对象是否相等的规则是:


首先,判断两个对象的hashCode是否相等

如果不相等,认为两个对象也不相等
如果相等,则判断两个对象用equals运算是否相等
如果不相等,认为两个对象也不相等
如果相等,认为两个对象相等



我们在equals方法中需要向下转型,效率很低,所以先判断hashCode方法可以提高效率



如何重写hashCode方法呢?



你可以写

Java代码 
public int hashCode(){  
  return 42;  

public int hashCode(){ return 42;}
这是一种符合规则的写法,保证了两个equal 的object 拥有相同的hashCode

    但这种方法显然是不可取的



比较通用的做法是

返回一个result



Java代码 
public int hashCode() {  
  int result = 17;  //任意素数  
result = 31*result +c1; //c1,c2是什么看下文解释  
  result = 31*result +c2;  
  return result;  


其中c1,c2是我们生成的你要计算在内的字段的代码,生成规则如下:

如果字段是boolean 计算为(f?1:0);

如果字段是byte,char,short,int则计算为 (int)f;

如果字段是long 计算为 (int)(f^(f>>32));

如果字段是float 计算为 Float.floatToLongBits(f);

如果字段是一个引用对象,那么直接调用对象的hashCode方法,如果需要判空,可以加上如果为空就返回0;
如果字段是一个数组则需要遍历所有元素,按上面几种方法计算;



当你写完后hashCode方法后问问自己

1、是否两个equal的实例,拥有相同的jhashCode

2、两个不同的实例,是否拥有相同的hashCode

热点排行