自动化hashCode()和equals()

问题产生:当需要自动实现hashCode()和equals()方法

解决方法:使用EqualsBuilder和HashCodeBuilder

使用举例:

import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.EqualsBuilder; public class PoliticalCandidate { // Member variables - omitted for brevity // Constructors - omitted for brevity // get/set methods - omitted for brevity // A hashCode which creates a hash from the two unique identifiers public int hashCode( ) { return new HashCodeBuilder(17, 37) .append(firstName) .append(lastName).toHashCode( ); } // An equals which compares two unique identifiers public boolean equals(Object o) { boolean equals = false; if ( o != null &&PoliticalCandidate.class.isAssignableFrom(o) ) { PoliticalCandidate pc = (PoliticalCandidate) o; equals = (new EqualsBuilder( ) .append(firstName, ps.firstName) .append(lastName, ps.lastName)).isEquals( ); } return equals; } } 

Discussion:

1.在上述例子中,当有相同的firstname和lastname时,认为两个对象的hashCode相同,从而equals()返回true.

如果hashCode取决于该class的所有filed时需要使用反射机制来产生一个hashCode。

public int hashCode( ) { return HashCodeBuilder.reflectionHashCode(this);
}

和ToStringBuilder 与 HashCodeBuilder一样 EqualsBuilder 也是使用append()方法进行配置,EqualsBuilder的append()方法可以接受基本类型、对象、数组作为参数。EqualsBuilder强大的地方在于可以直接把数组作为参数传入append()方法,EqualsBuilder会依次比较数组中的每个元素。

2.如果两个对象相等当且仅当每个属性值都相等 这句话可以由以下代码实现:

public boolean equals(Object o) { return EqualsBuilder.reflectionEquals(this, o);
}

使用EqualsBuilder和HashCodeBuilder生成hashcode和equal方法相关推荐

  1. HashCode和equal方法

    equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值. 而hashCode()是对象或变量通过哈希算法计算出的哈希值. 之所以有hashCode方 ...

  2. 026_使用eclipse生成hashCode和equals方法

    1. 使用eclipse生成hashCode方法, 模拟一个两个对象实例不同, hashCode形同, 两个对象的equals方法返回flase的场景. 1.1. People类 public cla ...

  3. EqualsBuilder和HashCodeBuilder

    EqualsBuilder和HashCodeBuilder 自动化hashCode()和equals()   问题产生:当需要自动实现hashCode()和equals()方法   解决方法:使用Eq ...

  4. Lombok的@Data生成的hashCode和equals方法坑

    一.场景复现 创建两个lombok的@Data注解的类Pig实例,放进HashMap当key,map里面的数据居然被覆盖了. package com.mk;import lombok.Data; @D ...

  5. Java中hashCode和equals方法的正确使用

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解.我将讨论他们的默认实现,以及如何正确的重写他们.我也将使用Apache Commons提供的工具包做一个实现. 目录: 1.ha ...

  6. Hibernate中用到联合主键的使用方法,为何要序列化,为何要重写hashcode 和 equals 方法...

    联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为 ...

  7. 为什么重写HashCode()和equal()

    先揭晓答案:重写这俩个方法是为了在使用HashMap 传入自定义Key时,HashMap还能根据需求正常使用. 现在有这样的需求:根据Key的属性返回value. 不重写会怎样,来看代码 class ...

  8. Java的HashCode,Equal和==

    ----------------------------------------以下是分割线---------------------------------------- 我们都知道Java语言是完 ...

  9. 生成 HashCode 一致的字符串

    生成 HashCode 一致的字符串 package com.zl.map;import java.math.BigDecimal; import java.util.Random;/*** &quo ...

  10. 重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源

    转载请注明出处: http://blog.csdn.net/javazejian/article/details/51348320 今天这篇文章我们打算来深度解读一下equal方法以及其关联方法has ...

最新文章

  1. MyBaties学习记录
  2. PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx
  3. EOS账户系统(4)账户权限分级
  4. python cnn模型_ZfNet解卷积:可视化CNN模型( PythonCode可视化Cifar10)
  5. android studio有时打不开,android studio 打不开的几种可能
  6. 管理系统中的计算机应用答案,《管理系统中计算机应用》试卷答案
  7. 让我们一起ML吧(一)聚类分析
  8. .Net向Page和UpdatePanel输出JS
  9. 基于Multisim的MC1496调幅电路的仿真
  10. 图像的像素、分辨率、像元尺寸、大小、清晰度的关系
  11. 素数表(Eratosthenes)
  12. 一名软件测试工程师的一天24小时(每天在忙什么)
  13. 好的设计的10个原则
  14. 大卫·希尔伯特:数学界的无冕之王
  15. 数据类型_function_函数概论
  16. VS--安装VS2010出现VC9.0 Runtime问题的解决方法
  17. 字符编码,ASCII、Unicode与UTF-8的理解
  18. sql server2005完全卸载与重装
  19. 启动AutoCAD Electrical提示“缺少缺少驱动程序AceRedist”的解决办法
  20. (附源码)计算机毕业设计SSM智能导诊系统

热门文章

  1. 设计模式-----桥接模式(Bridge Pattern)(转)
  2. 一篇极好的 CSS 教程 (ZZ)
  3. Java容器工具类Arrays
  4. Windows Server 2016-DHCP服务器审核日志大小调整
  5. linux每日命令(20):find命令概览
  6. servlet request返回上下文路径的方法
  7. Java之Ajax技术
  8. 源代码管理器添加步骤
  9. 企业开发基础设施--序
  10. 4.算法通关面试 --- 树和图