前提:这个实体类必须实现java.io.Serializable这个接口类。
实体类最下面有三个重写的方法toString 、equals、 hashCode,如何理解为什么都要重写这三个方法?
这些就涉及到业务上的操作。
首先,toString是将一个对象输出为字符串,更适合人们阅读理解。其次,Equals和hashcode一起实现去重。
比如,有一个列表,存在相同的数据(学号,姓名…),现在只需要其中的一个即可(去重),现在为了更快更准确的查到这条数据,就可同时使用equals和hashCode对数据进行筛选,筛选方法是使用equal对姓名(对象)进行比对,使用hashCode对学号执行哈希算法返回hash码,两者联合起来判断是否相等。Equal为true时,hashCode也为true,反之,不一定。
总:一个列表放到set中(set支持去重),是通过序列化hashCode,然后输成为字符串。
重写实例:
public class Student implements java.io.Serializable {
private static final long serialVersionUID = 1L;
/*此处没用的代码我已删除,只留下和主题相关的代码*/
@Override
public String toString() {
return org.apache.commons.lang3.builder.ToStringBuilder.reflectionToString(this);
}
@Override
public boolean equals(Object object) {
return org.apache.commons.lang3.builder.EqualsBuilder.reflectionEquals(this, object);
}
@Override
public int hashCode() {
return org.apache.commons.lang3.builder.HashCodeBuilder.reflectionHashCode(this);
}
}