DomainModel中的hashCode和equals方法

hashCode:
他是用来产生hash值的,用在Hashtable上,也包括HashMap等实现。
hashCode的基本约定是:
1、hashCode方法在同一个object上不管被调用了多少次,在同一次执行的Java程序中,hashCode方法必须返回一个持续相同的int。在object被修改时,不给equals方法提供信息。这个int值在同一个程序的两次不同执行过程中(同一程序执行两次),不需要保持恒定。
2、如果两个object通过equals()方法判断相等,则调用它们的hashCode方法应该产生相同的结果。
3、两个通过equals()方法判定不相等的object,调用它们的hashCOde方法并不是必须返回不同的结果。但是,成序言们应该意识到对于不相等的object产生不同的int结果有助于提升hashtables的效率。
一般技术上,通过将object的内部地址转换为integer的方法来产生hashCode,但这不是必需的。

equals:
就是判断是否相等的方法。
基本约定如下:
自反:就是x.equals(x)应该返回true
对称:x.equals(y)返回true则y.equals(x)返回true
传递:x.euqls(y)==true,y.equals(z)==true,那么x.equals(z)也必须返回true
持续性:就是说如果x.equals(y)==true,不管它调用多少次都应该返回true
非空引用:x.equals(null)应该返回false

准则原因这里:
http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html#hashCode()

在实际Domain中如何实现他们比较好呢?从eclipseWork中的模板生成如下:

ExpandedBlockStart.gif ContractedBlock.gif public   boolean  equals(Object rhs)  dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (rhs == nulldot.gif{
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (!(rhs instanceof Town)) dot.gif{
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        Town that 
= (Town) rhs;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if ((this.getId() == null|| (that.getId() == null)) dot.gif{
InBlock.gif            
return false;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
return (this.getId().equals(that.getId()));
ExpandedBlockEnd.gif    }

ExpandedBlockStart.gif ContractedBlock.gif public   int  hashCode()  dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif        
if (this.hashValue == 0dot.gif{
InBlock.gif            
int result = 17;
InBlock.gif            
int idValue = (this.getId() == null? 0 : this.getId().hashCode();
InBlock.gif            result 
= (result * 37+ idValue;
InBlock.gif            
this.hashValue = result;
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
return this.hashValue;
ExpandedBlockEnd.gif    }

下一步还要继续研究,上面的的方法很类似于“ Java theory and practice: Hashing it out”
http://www-128.ibm.com/developerworks/java/library/j-jtp05273.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值