参见英文答案 >
Changing an object which is used as a Map key 5个
我知道我不能在HashMap中有两个相等的键(通过equals() – 方法).如果我尝试使用已存在的密钥向HashMap添加键值对,则旧值将被新值替换.
我知道我不能在HashMap中有两个相等的键(通过equals() – 方法).如果我尝试使用已存在的密钥向HashMap添加键值对,则旧值将被新值替换.
但是如果我将现有密钥更改为等于另一个现有密钥怎么办?
在这种情况下,map.get()方法将如何表现(应用于其中一个相等的键)?
下面非常简单的例子.
public class Person{ private int age; private String name; public Person(int a,String n){ age = a; name = n; } public void setAge(int a){ age = a; } public int getAge(){return age; } public String getName() {return name; } @Override public boolean equals(Object o){ if(!(o instanceof Person)){return false;} Person p = (Person) o; return ((p.getName().equals(this.getName())) && (p.getAge() == this.getAge())); } @Override public int hashCode(){return age;} } public class MainClass{ public static void main(String[]args){ Person p1 = new Person("Bill",20); Person p2 = new Person("Bill",21); HashMap<Person,String> map = new HashMap<>(); map.put(p1,"some value"); map.put(p2,"another value"); p1.setAge(21); String x = map.get(p1); // <-- What will this be?? System.out.println(x); } }
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。