解答
一般的地方不需要重载hashCode,只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode。
那么为什么要重载hashCode呢?
要比较两个类的内容属性值,是否相同时候,根据hashCode 重写规则,重写类的指定字段的hashCode(),equals()方法。
例如
public class EmpWorkCondition{
/**
* 员工ID
*/
private Integer empId;
/**
* 员工服务总单数
*/
private Integer orderSum;
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
EmpWorkCondition that = (EmpWorkCondition) o;
return Objects.equals(empId, that.empId);
}
@Override
public int hashCode() {
return Objects.hash(empId);
}
// 省略 getter setter
}
public static void main(String[] args) {
List<EmpWorkCondition> list1 = new ArrayList<EmpWorkCondition>();
EmpWorkCondition emp1 = new EmpWorkCondition();
emp1.setEmpId(100);
emp1.setOrderSum(90000);
list1.add(emp1);
List<EmpWorkCondition> list2 = new ArrayList<EmpWorkCondition>();
EmpWorkCondition emp2 = new EmpWorkCondition();
emp2.setEmpId(100);
list2.add(emp2);
System.out.println(list1.contains(emp2));
}
输出结果:true
上面的方法,做的事情就是,比较两个集合中的,实体类对象属性值,是否一致
OrderSum 不在比较范围内,因为没有重写它的,equals()和hashCode()方法
为什么要重载equal方法?
因为Object的equal方法默认是两个对象的引用的比较,意思就是指向同一内存,地址则相等,否则不相等;
如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。
帖子还没人回复快来抢沙发