这篇文章给出了这样的一道面试题:
在 HashMap 中存放的一系列键值对,其中键为某个我们自定义的类型。放入 HashMap 后,我们在外部把某一个 key 的属性进行更改,然后我们再用这个 key 从 HashMap 里取出元素,这时候 HashMap 会返回什么?
文中已给出示例代码与答案,
key 更新后 hashCode 确实更新了,而且 HashMap 里面的对象就是我们原来的对象,最后的结果是null。
但是,关于HashMap的原理没有做出解释。
1. 特性
我们可以用任何类作为HashMap的key,但是对于这些类应该有什么限制条件呢?且看下面的代码:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
}
Map<Person, String> testMap = new HashMap<>();
testMap.put(new Person("hello"), "world");
testMap.ge
文章探讨了在HashMap中使用自定义类型作为键时,更改键的属性后从HashMap中获取元素可能返回null的问题。原因是未覆盖键的hashCode方法,导致不同对象但具有相同字段值的键被视为不等。HashMap通过key的hashCode进行索引,使用链地址法解决哈希冲突。良好的hashCode实现能减少冲突,提高查询效率。
订阅专栏 解锁全文
7601

被折叠的 条评论
为什么被折叠?



