HashMap常见面试题汇总:建议初步了解源码后再细品

本文总结了HashMap的面试常见问题,包括其数据结构、哈希冲突的解决、扩容机制、loadFactor的作用以及Java8中引入红黑树的原因。HashMap使用数组+链表/红黑树实现,通过扰动hash函数降低哈希冲突,当元素达到容量的75%时会扩容。面试中还会探讨HashMap的put和get操作、扩容过程以及与HashTable的区别等。

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

一、前言

HashMap底层源码涉及相关内容还是非常的多的

一般“高开”都是尝试去了解这一主题

但是面试环节问题是有局限性的,所以常问的我们可以进行归纳下

二、开胃小菜

原理(需要掌握*****)

 

从上图我们可以发现数据结构由数组+链表组成,一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key.hashCode())%len获得,也就是元素的key的哈希值对数组长度取模得到。比如上述哈希表中,12%16=12,28%16=12,108%16=12,140%16=12。所以12、28、108以及140都存储在数组下标为12的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

架构师速成记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值