【手撕代码】手写一个简单的HashMap

本文介绍如何手写一个简单的HashMap,重点在于实现put和get方法。通过创建16个桶并利用key的hash值进行索引,形成数组+链表的数据结构。在put操作中,如果桶已满则形成链表,get操作则通过key的hash值快速定位到对应的桶并遍历查找。
摘要由CSDN通过智能技术生成

最近看面经发现很多人都遇到手写 HashMap 的场景。我们都知道 JDK1.7 和 JDK1.8 中的 HashMap 实现差别还是比较大的,主要是 JDK1.8中的 HashMap 引入了红黑树。那么面试过程中,应该不会让你手写红黑树的(我觉得),所以只需要掌握一个简单的 put、get、resize 方法即可。本文先写了 put 和 get 方法,其他方法后续再完善。

1、先新建 16个 桶即 bucket(16是源码默认的,可以自定义),给桶分别标上 1~16 标号;

2、put 一个键值对之后,用 key 的 hash 值对 16 取余,结果肯定也是一个 1~16 范围内的数值,把这对键值对放到取余后的值对应的那个的桶里(注意,不可能为每一个 hash 值都创建一个桶,那样的话代价太大,这里只创建了16个桶,所以很有可能一个桶里放入多个键值对。如果偏巧那个桶里是空的,直接把 key、value 放进去,如果桶不为空,就要一个一个比对桶里原有的 key 是否和现在要放进去的 key 是同一个(即 hash 值相同且 equals 为 true),如果是同一个,那么就用新的 value 覆盖替换原来的 value 就行,如果遍历完了,没有一个相同的 key,那么就放到所有 key 的最后面(jdk1.8之后是放在最前面ÿ

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值