使用EqualsBuilder和HashCodeBuilder生成hashcode和equal方法
自动化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方法相关推荐
- HashCode和equal方法
equals()反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值. 而hashCode()是对象或变量通过哈希算法计算出的哈希值. 之所以有hashCode方 ...
- 026_使用eclipse生成hashCode和equals方法
1. 使用eclipse生成hashCode方法, 模拟一个两个对象实例不同, hashCode形同, 两个对象的equals方法返回flase的场景. 1.1. People类 public cla ...
- EqualsBuilder和HashCodeBuilder
EqualsBuilder和HashCodeBuilder 自动化hashCode()和equals() 问题产生:当需要自动实现hashCode()和equals()方法 解决方法:使用Eq ...
- Lombok的@Data生成的hashCode和equals方法坑
一.场景复现 创建两个lombok的@Data注解的类Pig实例,放进HashMap当key,map里面的数据居然被覆盖了. package com.mk;import lombok.Data; @D ...
- Java中hashCode和equals方法的正确使用
在这篇文章中,我将告诉大家我对hashCode和equals方法的理解.我将讨论他们的默认实现,以及如何正确的重写他们.我也将使用Apache Commons提供的工具包做一个实现. 目录: 1.ha ...
- Hibernate中用到联合主键的使用方法,为何要序列化,为何要重写hashcode 和 equals 方法...
联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为 ...
- 为什么重写HashCode()和equal()
先揭晓答案:重写这俩个方法是为了在使用HashMap 传入自定义Key时,HashMap还能根据需求正常使用. 现在有这样的需求:根据Key的属性返回value. 不重写会怎样,来看代码 class ...
- Java的HashCode,Equal和==
----------------------------------------以下是分割线---------------------------------------- 我们都知道Java语言是完 ...
- 生成 HashCode 一致的字符串
生成 HashCode 一致的字符串 package com.zl.map;import java.math.BigDecimal; import java.util.Random;/*** &quo ...
- 重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源
转载请注明出处: http://blog.csdn.net/javazejian/article/details/51348320 今天这篇文章我们打算来深度解读一下equal方法以及其关联方法has ...
最新文章
- MyBaties学习记录
- PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx
- EOS账户系统(4)账户权限分级
- python cnn模型_ZfNet解卷积:可视化CNN模型( PythonCode可视化Cifar10)
- android studio有时打不开,android studio 打不开的几种可能
- 管理系统中的计算机应用答案,《管理系统中计算机应用》试卷答案
- 让我们一起ML吧(一)聚类分析
- .Net向Page和UpdatePanel输出JS
- 基于Multisim的MC1496调幅电路的仿真
- 图像的像素、分辨率、像元尺寸、大小、清晰度的关系
- 素数表(Eratosthenes)
- 一名软件测试工程师的一天24小时(每天在忙什么)
- 好的设计的10个原则
- 大卫·希尔伯特:数学界的无冕之王
- 数据类型_function_函数概论
- VS--安装VS2010出现VC9.0 Runtime问题的解决方法
- 字符编码,ASCII、Unicode与UTF-8的理解
- sql server2005完全卸载与重装
- 启动AutoCAD Electrical提示“缺少缺少驱动程序AceRedist”的解决办法
- (附源码)计算机毕业设计SSM智能导诊系统