为什么两个哈希映射不会覆盖彼此的值?

时间:2015-08-10 07:28:12

标签: java hashmap equals

public static void main(String[] args) {
    HashMap<Integer, String> hashMap1 = new HashMap<Integer, String>();
    HashMap<Integer, String> hashMap2 = new HashMap<Integer, String>();

    hashMap1.put(1, "Ram");
    hashMap1.put(2, "Mitali");
    hashMap1.put(2, "Gaurav");

    hashMap2.put(1, "Ram");
    hashMap2.put(2, "Test");
    System.out.println("hashMap1 values : ");
    for(Map.Entry<Integer, String> entry : hashMap1.entrySet()) {
        System.out.println("Hashcode of " + entry.getKey() + ":" + entry.getKey().hashCode());
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }

    System.out.println("hashMap2 values : ");
    for(Map.Entry<Integer, String> entry : hashMap2.entrySet()) {
        System.out.println("Hashcode of " + entry.getKey() + ":" + entry.getKey().hashCode());
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

输出结果为:

hashMap1 values : 
Hashcode of 1:1
1:Ram
Hashcode of 2:2
2:Gaurav
hashMap2 values : 
Hashcode of 1:1
1:Ram
Hashcode of 2:2
2:Test

当来自不同地图的所有密钥的哈希码相等且密钥也相等时,为什么两个地图都不会被覆盖为:

1, "Ram"
2, "Test"

键是相等的加上哈希码也是相等的,但是为什么它们不会被覆盖?我在接受采访时向我询问,但我无法回答。

2 个答案:

答案 0 :(得分:1)

您的两个HashMaps是不同的对象,每个对象都有自己的键和值。没有理由期望一个中的键和值被另一个中的键和值覆盖。

答案 1 :(得分:1)

这是因为它们在逻辑上和物理上都是独立的对象。考虑是否要在其中一个HashMap中添加新值,您希望它在另一个地图中吗?