在尝试获取已存储在地图中的对象时,Hashmap返回Null

时间:2017-05-12 20:31:02

标签: java collections

我有一个hashmap并使用Objects作为键,当你更改Objects的属性时的结果似乎很奇怪。例如

public class Users
{
    private String  name;
    public Users(String name)
    {
        this.name = name;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    @Override
    public int hashCode()
    {
        return name.hashCode();
    }
    @Override
    public boolean equals(Object obj)
    {
        Users other = (Users) obj;
        if (!name.equals(other.name))
            return false;
        return true;
    }
}

我的主要课程如下

public class MyMainClass
{
    public static void main(String args[])
    {
        Map<Users, String> map = new HashMap<Users, String>();

        Users u1 = new Users("John");
        map.put(u1, "Australia"); // line 1

        map.put(new Users("John"), "US"); // line 2

        System.out.println(map.get(new Users("John"))); // line 3 : print US

        u1.setName("Lara"); //line 4
        System.out.println(map.get(new Users("John"))); // line 5 : print null
    }
}

在第1行的上面示例中,我放置了一个u1对象,而第2行覆盖了u1对象,其中包含新对象,这就是第3行打印覆盖对象US的原因。

第4行的

我正在改变地图中不存在的u1对象的值,然后为什么第5行打印为空。

在第5行,我使用new得到一个值,所以我认为应该返回US。

有人可以帮助我吗?

0 个答案:

没有答案