我有一个Person类的Overrided equals方法,该类比较class的name属性,如果相等,则从equals方法返回true。
当我创建Person对象的实例并将其用作hashmap中的键时,在使用具有相同名称的新对象进行检索时,我无法从hashMap中检索关联的值。
下面是我的
function_two
导入java.util.Map;
公共类ToStringTest {
import java.util.HashMap;
}
班级人物{
public static void main(String[] args) {
Person person = new Person("Jack", "California");
Map<Person,String> personsMap = new HashMap<>();
personsMap.put(person,"MyCar");
Person otherPerson = new Person("Jack", "California");
System.out.println(personsMap.get(otherPerson));
}
}
这是在使用otherPerson对象进行检索时打印null。
有人可以解释这种行为吗?
答案 0 :(得分:0)
首先,如果key不为null,则在地图personsMap.put(person,"MyCar");
中添加新人物时,将确定放置元素的位置。通过调用密钥的hashcode
方法来确定。之后有几个步骤,但是对于本示例来说并没有关系。
由于您没有覆盖hashcode()
,因此person
和otherPerson
将具有不同的hashcode
。
当您尝试通过某些键获取价值时,也会发生同样的情况。为了找到元素所在的位置,将调用hashcode()
。但是otherPerson
具有不同的hashcode
,它将导致没有项目(null
)的位置
equals()
用于在同一位置有许多元素(在列表或树结构中)的情况。然后找到合适的商品,将通过equals()
方法进行比较