`
Tin
  • 浏览: 138153 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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中的模板生成如下:

public boolean equals(Object rhs) {
        
if (rhs == null{
            
return false;
        }


        
if (!(rhs instanceof Town)) {
            
return false;
        }


        Town that 
= (Town) rhs;

        
if ((this.getId() == null|| (that.getId() == null)) {
            
return false;
        }


        
return (this.getId().equals(that.getId()));
    }

public int hashCode() {
        
if (this.hashValue == 0{
            
int result = 17;
            
int idValue = (this.getId() == null? 0 : this.getId().hashCode();
            result 
= (result * 37+ idValue;
            
this.hashValue = result;
        }


        
return this.hashValue;
    }

下一步还要继续研究,上面的的方法很类似于“Java theory and practice: Hashing it out”
http://www-128.ibm.com/developerworks/java/library/j-jtp05273.html
分享到:
评论

相关推荐

    Hibernate5.0用户手册中文版本

    5. 实现 equals() 与 hashCode() 方法: 实体对象必须提供 equals() 和 hashCode() 方法来确保对象的唯一性。 Bootstrap(引导、启动) Hibernate 的引导过程是指将 Hibernate 集成到应用程序中的过程。该过程主要...

    使用@IdClass创建联合主键,并实现外部关联

    首先,我们需要创建一个BuildUnionPkId类,实现Serializable接口,并重写hashCode和equals方法。 ```java public class BuildUnionPkId implements Serializable { private static final long serialVersionUID = ...

    Hibernate5中文用户手册

    - 实现 equals()与 hashCode()方法,确保对象的比较和集合操作正确。 2.2. Dynamic(动态)模型 除了POJO模型,Hibernate还支持动态模型,它允许在运行时创建和操作数据模型,无需预先定义实体类,为灵活的数据库...

    Hibernate5用户手册中文版

    Domain Model(域模型)章节,着重讲解了Hibernate如何通过POJO模型来表示业务对象,并且对POJO模型中的类特性提出了具体要求,例如无参构造器、标识属性、非final类的使用、持久化属性的getter和setter方法以及重写...

    mybatis生成代码工具(带注释)

    你可以为字段、类和方法设置不同的注释模板,确保生成的注释符合项目规范。 5. **生成策略**:MBG提供了多种生成策略,例如是否生成构造函数、get/set方法、equals()和hashCode()方法等,可以根据项目需求进行选择...

    iMOTV:使用MVVM的影视节目应用

    4. **数据类**:自动实现equals(), hashCode() 和 toString(),简化了数据对象的创建。 5. **Coroutines**:解决异步编程问题,避免了回调地狱,提高性能和用户体验。 **iMOTV-master文件结构** iMOTV-master...

    ImOrganization

    3. **数据类**:Kotlin的数据类用于简单的数据持有,自动生成equals(), hashCode(), toString()等方法,简化了日常开发工作。 4. **领域驱动设计(Domain-Driven Design, DDD)**:项目可能采用了DDD策略来构建其...

    CC_MobileApp

    7. **数据类**:Kotlin的数据类简化了创建具有getter、setter、equals()、hashCode()和toString()等标准方法的类的过程,非常适合表示数据对象。 8. **Dagger 2或Hilt依赖注入**:为了实现组件间的解耦和更易于测试...

    hibernate_reference.pdf

    - **Implementing equals() and hashCode()**: Discusses the importance of implementing these methods for entities to ensure correct behavior in Hibernate. - **Dynamic Models**: Introduces dynamic models...

Global site tag (gtag.js) - Google Analytics