覆盖equals方法以在插入HashMap时返回false

时间:2017-05-11 12:23:50

标签: java

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返回它们的确切值。

1 个答案:

答案 0 :(得分:1)

hashcode equals是hashmap决定两个键是否相同但不是唯一一个/

的第一个要求

(key1 == key2 || key1.equals(key2))也是必需的。

如果将equals方法更改为始终返回true,则可以看到地图中最后只有一个元素。