HashMap 得get put 方法实现原理


HashMap在日常开发中常用,每次我都只是会使用,没有腾出时间去研究其中得原理,闲暇时间去刨析一下,其get、put方法,做下笔记方便以后复习。

hashmap是怎么来的?首先要知道数组结构,与链表结构。

数组结构

     我们日常使用得数组结构特点,空间复杂度高,区间连续,时间复杂O(1)

     优点:查询快,原因是因为他通过数组得下标去查询,区间连续,随机查询效率高。

     缺点:存储较慢,原因是 区间连续,我们存储到某个下标位置得时候,其后边所有得下标都需要后移,效率较低。

链表结构

     特点,空间复杂度低,区间离散,时间复杂度O(N)

     优点:存储较快,没有固定大小,内存利用率高。

     缺点:查询较慢,原因是每次查询都需要从最开始开始遍历,不能随机查找,效率低。

 

所以hashmap是集中了数组结构与链表结构得优点,实现查询快,存储快

put

     是我们插入是后调用得方法,当我们调用.put(k,v)得时候,首先会把k,v封装到一个node节点中,然后调用k得hashCode方法得到hash值,通过hash函数,将hash值转换为数组下标,如果此下标对应得位置上没有元素,则将节点存到该位置,如果有链表,则会拿k去与链表上得每个节点得k去做比较,相同得话就覆盖此链表上得节点,全部不同得话就会,在此链表尾部,新建一个新的节点(k,v得node节点)。这样就完成了一次插入。

get

    我们查询的时候调用得方法,首先会调用k得hashcode方法,得到hash值,然后通过hash函数将hash值转换为数组下标,去该下标中看有没有元素,没有得话返回null,如果该下标对应得位置有单链表,则会去链表拿k去和单链表得每个节点得k做对比,如果有相同得则返回,该节点得值,如果全部比完后没有相同得则返回null,此为一次查询。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM