`
legend26
  • 浏览: 16732 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

重写hashcode和equals方法的原则

阅读更多
public class Element {
    String s;    
    int number;
    public Element(int n) {
    	number=n;
    }
    public int hashCode(){
    	return s.hashCode()*number;
    	/* int result=17;   任意素数  
    	 * result=result*37+s.hashcode();
    	 * resultj=result*37+number;
    	 * retrun result;
    	 */
    }
    public boolean equals(Object o){
    	return (o instanceof Element)&&s.equals(((Element)o).s)&&number==((Element)o).number;
    }
}

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

附:其中(number)处是我们生成的你要计算在内的字段的代码,生成规则如下:

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

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

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

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

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

相关推荐

Global site tag (gtag.js) - Google Analytics