转载

HashMap图解原理与数据结构

面试被虐

周末你好!我是狮子王辛巴。一名无缘985,日常996工程师。利用周末休息时间给大家献上一篇技术文章。

HashMap图解原理与数据结构

作为一名为人民币服务的工程师,学好技术是多么重要的事情。今天跟各位老铁们详细说说日常的开发中经常用到的HashMap。 HashMap图解原理与数据结构

怎么可能骗你,真的哦,无论我们在开发中还是在面试的时候HashMap必问好不好。上次“娜娜”去熊厂 就被面试官问到了,被虐的体无完肤。 HashMap图解原理与数据结构 哼~~~哼~~~哼~~~~哼~~~~哼~~~~哼~~哼~~~哼~~~~

娜娜宝贝别生气了,辛巴哥哥现场教学了。首先我们快速回忆下我们日常开发中怎么使用hashmap的。

快速开始

hashmap在我们日常工作一般用的多的就是其put方法和get方法。

技术本质

现在我们已经对hashmap有一个大致的了解了,接下来我们要去了解其底层的原理,也就是本质。 HashMap图解原理与数据结构 很多朋友在面试的时候经常被问到hashmap底层实现原理?都说是数据+链表 ok!估计大家都会被了 但是真正知道底层如何存储的我相信不多,不急 我们来看下数组和链表的定义

数组

数组:采用一段连续的存储单元来存储数据。对于指定下标的查找,时间复杂度为O(1);对于一般的插入删除操作, 涉及到数组元素的移动,其平均复杂度也为O(n)

HashMap图解原理与数据结构 Java代码表示

链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 对于链表的新增,删除等操作(在找到指定操作位置后),仅需处理结点间的引用即可,时间复杂度为O(1), 而查找操作需要遍历链表逐一进行比对,复杂度为O(n)

HashMap图解原理与数据结构

哈希算法

哈希算法(也叫散列),就是把任意长度值(Key)通过散列算法变换成固定长度的key地址,通过这个地址进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。 HashMap图解原理与数据结构

实现原理PUT

刚才我们分析了hashmap由数组+链表构成,介绍了数组+链表的描述,接下来我们就把这两个数据结构整合在一起吧,在整合在一起 我们写一个伪put代码,目的是看hahsmap底层存储

运行代码如下

对应的图形存储结构就是:

1. 初始化: HashMap图解原理与数据结构 **2. 第一次put:

这次put“刘一” 存放在下标为4的数组上,对象类型是

key:刘一,hash值:671464,存储位置:4

HashMap图解原理与数据结构 第二次put: 这次put“陈二” 存放在下标为5的数组上

key:陈二,hash值:1212740,存储位置:5 HashMap图解原理与数据结构

第三次put:这次次put“张三” 存放在下标为4的数组上,可是下标为4已经有“刘一”了,如果暴力存储会出问题的呀。别急嘛,我们刚才不是还学了链表嘛。这个时候该链表上场了。

key:张三,hash值:774889,存储位置:4

HashMap图解原理与数据结构

第N次put:我相信通过前几次的put大家都会put了吧,最后存储结构是这样的。 HashMap图解原理与数据结构

实现原理GET

我们put是根据hash算法定位到数组下标的,那我们get怎么找到他们了?非常简单嘛原路去找 尽然可以通过hash算法put,肯定也可以通过hash算法get到嘛。A点尽然可以到B点,那自然B点也可以到A点嘛。示范一个,只示范一个。

HashMap图解原理与数据结构

实现

娜娜你听懂了嘛? HashMap图解原理与数据结构 哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈!快到碗里来吧

HashMap图解原理与数据结构

总结

好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是牛人。那我再布置个作业吧。根据我们图形的演示,你能手写实现吗?

我提示下

需要源代码的牛人欢迎联系我呀。

推荐阅读:

  • 牛X,试用了下GitHub上22k Star的第一抢票神器,3秒钟抢到!

  • 如何将Azure SQL 数据库还原到本地数据库中

  • 你能说出 Kafka 这些原理吗

  • 我是怎么读源码的,授之以渔

喜欢我可以给我设为星标哦

HashMap图解原理与数据结构

HashMap图解原理与数据结构

好文章,我  在看  

HashMap图解原理与数据结构
原文  http://mp.weixin.qq.com/s?__biz=Mzg3MjA4MTExMw==&mid=2247487531&idx=2&sn=b0a00c74ed8d57d3fd9549b3a73886e2
正文到此结束
Loading...