import java.util.HashMap;
import java.util.Map;
public class MapTest {
public String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public int hashCode(){
return 100;
}
@Override
public boolean equals(Object te){
return false;
}
public static void main(String[] args) {
MapTest obj = new MapTest();
MapTest obj1 = new MapTest();
obj.setId("test");
obj1.setId("test2");
Map<MapTest,Integer> test = new HashMap<MapTest,Integer>();
test.put(obj, 1000);
test.put(obj1, 2000);
test.put(new MapTest(), 4000);
System.out.println(test.get(obj)); //1000
System.out.println(test.get(obj1));//2000
System.out.println(test.get(new MapTest()));//Null
System.out.println(test.size());//3
}
}
这里对象返回相同的哈希码,所以为了避免在向HashMap添加数据时覆盖我有一个返回false的equals方法。现在,当我使用get时,我得到正确的数据示例obj1和obj给出了确切的值,但我的问题是当它们的哈希码都相同时,java如何区分不同的对象并从hashmap返回它们的确切值。
答案 0 :(得分:1)
hashcode equals是hashmap决定两个键是否相同但不是唯一一个/
的第一个要求(key1 == key2 || key1.equals(key2))也是必需的。
如果将equals方法更改为始终返回true,则可以看到地图中最后只有一个元素。