我想了解HashMap放置行爲,並且我對以下方案有點困惑。下面是實現爲此我將在HashMap中瞭解HashMap放置方法
class Person {
int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
關鍵用於測試目的,我有一個實用程序方法
public void displayMap() {
Person person = new Person();
person.setId(1);
person.setName("praveen");
Map<Person, String> mapPerson = new HashMap<>();
mapPerson.put(person, "");
person.setId(2);
person.setName("praveen");
mapPerson.put(person, "");
System.out.println(mapPerson);
}
我預計輸出爲{Person [id=1, name=praveen]=, Person [id=2, name=praveen]=}
類之一,但我看到它如{Person [id=2, name=praveen]=, Person [id=2, name=praveen]=}
。
我使用同一個人對象插入多次作爲關鍵但具有不同的id值。但據我的理解,如果密鑰相同,理想情況下應該用新密鑰替換現有密鑰。但是我看到的是id = 2和name = praveen多次顯示的人。是不是重複鍵和違反hashmap原理與重複鍵?爲什麼它顯示{Person [id=2, name=praveen]=, Person [id=2, name=praveen]=}
沒有{Person [id=1, name=praveen]=, Person [id=2, name=praveen]=}
出於好奇,你有沒有試圖比較mapPerson中的兩個值?他們是否等同? – Johnnie
我做了,它返回等於 – Praveen