解答
一般的地方不需要重载hashCode,只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode。
那么为什么要重载hashCode呢?
要比较两个类的内容属性值,是否相同时候,根据hashCode 重写规则,重写类的指定字段的hashCode(),equals()方法。
例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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方法。
帖子还没人回复快来抢沙发