(1)hashcode与equals重写前后区别
方法 | 重写前 | 重写后 |
---|
equals | 与==一样,地址相同返回true | 自定义属性相同返回true |
hashcode | 地址相同返回true | 地址不同也可以返回true |
(2)为什么要重写,对hashmap与set集合的影响
hashmap中同时用到了hashcode与equals方法 假如一个重写一个重写
hashmap:
hashcode | equals | 结果 |
---|
重写 | 不重写 | euqals失效,找不到对象 |
不重写 | 重写 | equals相同的对象分配在不同的链表中 |
set
hashcode | equals | 结果 |
---|
重写 | 不重写 | 两个不同的对象会覆盖 |
不重写 | 重写 | set中存放内容相同地址不同的两个对象 |
(3)hashcode和equals如何重写
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (obj == this)
return true;
if (obj instanceof SimpleDemo) {
SimpleDemo sd = (SimpleDemo) obj;
return sd.department.equals(department) && sd.id == id;
}
return false;
jdk7
@Override
public int hashCode() {
return Objects.hash(name,salary,sex);
}