HashMap的底层原理分析jdk1.8以前

来源:互联网 发布:2016网络歌手名单 编辑:程序博客网 时间:2024/06/03 04:24

HashMap的原理

HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫Entry.这些键值对(Entry)分散存储在一个数组当中,这个数组就是HashMap的主干.HashMap数组的每一个元素的初始值都是Null

Put方法的原理

在调用Put方法的时候我们,HashMap要利用哈希函数来确定Entry的插入的位置也就是Entry的索引,例如put("hello",0),插入一个key为hello的元素.hanhMap内部会通过哈希函数将hello得到一个值,这个值就是数组中的index

这样就可以将Entry插入到主干(数组)中去,但是如果只是单纯的这样做是会有问题的,因为hashmap的长度是有限的,当插入的Entry越来越多是就会发生问题,索引冲突的问题

hashMap是这样处理这个问题的,HashMap数组中的每一个Entry不止是一个对象,同时也是一个链表的头结点,每一个Entry通过地址记住它的下一个节点,当产生冲突的时候直接插入对应的链表就可以了,但是需要注意的是它并不是插入尾部而是插入到了头部.至于为什么要插到头部.我也不知道为什么.

Get方法的原理

在调用Get方法的时候,和put方法同样的会经过一次哈希函数将key的所对应的index算出来,这样就可以拿到了,但是正如我们上面放的时候会有索引冲突.HashMap是如何获取到索引冲突的元素呢.这是候就用到key的原始值,它通过从头到尾的扫描Entry链表.从而找到对应的Entey.

这只是HashMap的一部分还有关于HashMap如何是数据均匀分布,HashMap的扩容,在扩容时会有发什么问题.这些问题我还在总结中.


原创粉丝点击