懒咪学编程


造个轮子-HashMap

时间:2020-08-17 17:05:25  来源:  作者:东方茄子  所属栏目:Java




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


造个轮子-HashMap

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

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

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

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

开始 新建WheelHashMap

造个轮子-HashMap

基本属性和hashMap保持一致

hash方法复制hashMap

造个轮子-HashMap

put方法

造个轮子-HashMap

resize扩容方法

造个轮子-HashMap

get方法

造个轮子-HashMap

总结

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

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

本文来自chentiefeng的博客

原文地址:https://segmentfault.com/a/1190000021406937,作者:东方茄子

以上就是对造个轮子-HashMap的相关介绍,希望对您学习有所帮助,感谢您关注懒咪IT学习网!

本文地址:https://c.lanmit.com/bianchengkaifa/Java/75020.html

 

推荐Java排行......