1 测试代码
因为覆盖了equals方法因此希望得到的结果应该是"bb",但是因为没有覆盖hashcode方法,所以实际得到的是null
因为两个new CC("aa")的hashcode的值不同,所以实际上在hashmap
中是找不到值得。
解决办法 复写hashcode方法
就可以正确获得结果
bb
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
本文通过一个具体的Java示例,解释了为什么在使用自定义类作为HashMap的键时,仅仅重写equals方法而不重写hashCode方法会导致查找失败。文章最后展示了如何正确地实现这两个方法以确保HashMap能够正常工作。
699

被折叠的 条评论
为什么被折叠?



