【JDK源码分析】浅谈HashMap的原理

文章探讨了在HashMap中使用自定义类型作为键时,更改键的属性后从HashMap中获取元素可能返回null的问题。原因是未覆盖键的hashCode方法,导致不同对象但具有相同字段值的键被视为不等。HashMap通过key的hashCode进行索引,使用链地址法解决哈希冲突。良好的hashCode实现能减少冲突,提高查询效率。
摘要由CSDN通过智能技术生成

这篇文章给出了这样的一道面试题:

在 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, St
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅唱书令

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值