造个轮子-HashMap


造个轮子-HashMap

发现自己对看源码特别痛苦,而且看了就忘。有必要按照源码已有的功能需求按照自己的想法去写一个轮子,然后比对着看才能理解。

需求分析

hashMap功能很多,结构为数组 链表(暂时忽略红黑树),准备就写两个基本功能:

  • put存数:懒加载数组,到达阈值(负载因子0.75)扩容,hash冲突开始链表模式。
  • get取数:能在hash冲突的情况下取出正确的数。

我就围绕这两个功能来仿照写一个WheelHashMap

开始

新建WheelHashMap

基本属性和hashMap保持一致

hash方法复制hashMap

put方法

resize扩容方法

get方法

总结

在造轮子的过程中体会到为什么数组长度要是2的倍数

  1. 通过hash值去计算数组坐标hash & (length-1),一般是通过取余实现,这里用与运算效率比取余高,正是因为2的倍数,才能这样设计。
  2. 扩容时对于hash冲突的链表rehash的高低位设计,也是因为2的倍数才能这么巧妙。

代码可以在Github上找到

本文来自chentiefeng的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值