为什么覆盖了equals方法一定要覆盖hashcode方法?

1 测试代码

public class HashMapTest {
public static class CC {
private String cc;
public String getCc() {
return cc;
}
public void setCc(String cc) {
this.cc = cc;
}
public CC(String cc) {
this.cc = cc;
}
@Override
public boolean equals(Object arg0) {
CC testC = (CC) arg0;
return cc.equals(testC.getCc());
}
}
public static void main(String[] args) {
Map<CC,String> map = new HashMap<CC,String>();
map.put(new CC("aa"), "bb");
System.out.println(map.get(new CC("aa")));
}
}


因为覆盖了equals方法因此希望得到的结果应该是"bb",但是因为没有覆盖hashcode方法,所以实际得到的是null
因为两个new CC("aa")的hashcode的值不同,所以实际上在hashmap
中是找不到值得。

解决办法 复写hashcode方法

public class HashMapTest {
public static class CC {
private String cc;
public String getCc() {
return cc;
}
public void setCc(String cc) {
this.cc = cc;
}
public CC(String cc) {
this.cc = cc;
}
@Override
public boolean equals(Object arg0) {
CC testC = (CC) arg0;
return cc.equals(testC.getCc());
}
@Override
public int hashCode() {
return cc.hashCode();
}
}
public static void main(String[] args) {
Map<CC,String> map = new HashMap<CC,String>();
map.put(new CC("aa"), "bb");
System.out.println(map.get(new CC("aa")));
}
}


就可以正确获得结果
bb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值