你的分享就是我们的动力 ---﹥

地图 containsKey 对象为key 输出false

map containsKey 对象为key 输出false
test代码,为什么test中的最后一个contain,不是返回true。要怎么让他能返回true。而不false呢

Food类中的equals和hascode方法
public boolean equals(Food food) {
if(this.id == food.id){
return true;
}
return false;
}
public int hashCode() {  
       int result ; 
        result = foodName.hashCode(); 
        return result;  
    } 


@Test
//测试代码
public void test5() {
Map map = new HashMap<Integer, Integer>();
Food f1 = new Food();
Food f2 = new Food();
Food f3 = new Food();
f1.setId(11);
f2.setId(22);
f3.setId(11);
f1.setFoodName("11");
f2.setFoodName("22");
f3.setFoodName("11");
map.put(f1, 22);
map.put(f2, 2233);
System.out.println(map.get(f1));
System.out.println(map.get(f2));
System.out.println(map.containsKey(f3));

}


运行结果

22
2233
false


------解决思路----------------------
引用:
Quote: 引用:

你这map本来就没有put  f3吧。


但是f1对象和f3对象是一样的。有相同的hashcode值,如果把f3加入map,应该是会覆盖f1的值。但是实际上,只会新增一个,size变为3,并不能覆盖。弄了一早上,还是不可以。


你对java的HashMap还是不了解,hashcode只是hashmap用来快速索引未知的条件,并不是判断key是否相同的条件,正真判断key是否相同是equals方法,所以加入f3是不会覆盖f1的,map.get(f3)也只会是f3的值,不会是f1的值