HashMap的底层原理分析jdk1.8以前

本文深入探讨了HashMap的工作原理,包括其内部结构、put方法如何通过哈希函数确定元素位置,以及解决索引冲突的方法。同时也解释了get方法如何通过哈希值定位到所需的Entry。

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

HashMap的原理

HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫Entry.这些键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干.HashMap数组的每一个元素的初始值都是Null

Put方法的原理

在调用Put方法的时候我们,HashMap要利用哈希函数来确定Entry的插入的位置也就是Entry的索引,例如put("hello",0),插入一个key为hello的元素.hanhMap内部会通过哈希函数将hello得到一个值,这个值就是数组中的index

这样就可以将Entry插入到主干(数组)中去,但是如果只是单纯的这样做是会有问题的,因为hashmap的长度是有限的,当插入的Entry越来越多是就会发生问题,索引冲突的问题

hashMap是这样处理这个问题的,HashMap数组中的每一个Entry不止是一个对象,同时也是一个链表的头结点,每一个Entry通过地址记住它的下一个节点,当产生冲突的时候直接插入对应的链表就可以了,但是需要注意的是它并不是插入尾部而是插入到了头部.至于为什么要插到头部.我也不知道为什么.

Get方法的原理

在调用Get方法的时候,和put方法同样的会经过一次哈希函数将key的所对应的index算出来,这样就可以拿到了,但是正如我们上面放的时候会有索引冲突.HashMap是如何获取到索引冲突的元素呢.这是候就用到key的原始值,它通过从头到尾的扫描Entry链表.从而找到对应的Entey.

这只是HashMap的一部分还有关于HashMap如何是数据均匀分布,HashMap的扩容,在扩容时会有发什么问题.这些问题我还在总结中.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值