java HashMap相关面试题

本文探讨了Java HashMap的相关面试问题,包括哈希算法计算hash值、哈希碰撞的处理、HashMap的数据结构与工作原理、扩容策略、以及从链表到红黑树的转换。深入解析了HashMap中put方法的过程、数组扩容细节以及并发环境下ConcurrentHashMap的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3.相关面试题

1.哈希表底层采用何种算法计算hash值?还有哪些算法可以计算出hash值?

底层采用的key值的hashCode()方法的值结合数组长度进行无符号右移16位(>>>)、按位异或(^)、按位与(&)计算出索引效率快

还可以采用:平方的取中法,取余数,伪随机数法,这些方法效率较慢

2.当两个对象的hashCode相等会怎么样?

会产生哈希碰撞,若key值内容相同则替换旧的value值,如果不相等,在java8之后在链表中使用链头法存储数据,如果链表的节点阈值超过八个,并且数组大于 64位,就会触发红黑树节点,使用红黑树存储

3.何时发生哈希碰撞和什么是hash碰撞,如何解决hash碰撞?

只要两个元素的key键值计算的哈希码值相同就会发生哈希碰撞,jdk8前使用链表解决hash碰撞,在java8之后使用链表+红黑树解决hash碰撞

4.如果两个键的hashcode相同,如何存储键值对?

hashcode相同,通过equals比较内容是否相同

相同:则新的value覆盖之前的value

不相同:则将新的键值对添加到哈希表中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

抹泪的知更鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值