博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap的底层实现
阅读量:5981 次
发布时间:2019-06-20

本文共 802 字,大约阅读时间需要 2 分钟。

  hot3.png

HashMap实际上是一个“链表的数组”的数据结构,每个元素存放链表头结点的数组,即数组和链表的结合体。HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。

1.存储

当程序试图将一个key-value对放入HashMap中时,程序首先根据该 key的 hashCode() 返回值决定该 Entry 的存储位置:如果两个 Entry 的 key 的 hashCode() 返回值相同,那它们的存储位置相同。如果这两个 Entry 的 key 通过 equals 比较返回 true,新添加 Entry 的 value 将覆盖集合中原有Entry 的 value,但key不会覆盖。如果这两个 Entry 的 key 通过 equals 比较返回 false,新添加的 Entry 将与集合中原有 Entry 形成 Entry 链,而且新添加的 Entry 位于 Entry 链的头部。

2.读取

从HashMap中get元素时,首先计算key的hashCode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的链表中找到需要的元素。

 归纳起来简单地说,HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。

转载于:https://my.oschina.net/iterxc/blog/734421

你可能感兴趣的文章
oracle-pl/sql之一
查看>>
SecureCRT5 中文乱码
查看>>
Python 的并发编程
查看>>
BP神经网络算法学习
查看>>
路越走越窄,尤其做技术的
查看>>
【流量劫持】SSLStrip 终极版 —— location 瞒天过海
查看>>
Android开源代码解读-基于SackOfViewAdapter类实现类似状态通知栏的布局
查看>>
【初探IONIC】不会Native可不可以开发APP?
查看>>
PyCharm for Mac(Python 开发工具)破解版安装
查看>>
Mavne + Spring整合CXF
查看>>
初接触ContentService遇到的一个问题
查看>>
mysql操作数据库
查看>>
重新注册系统所有dll文件
查看>>
GBin1专题之Web热点秀#14
查看>>
flash 大文件上传
查看>>
ZeroMQ接口函数之 :zmq_ctx_term - 终结一个ZMQ环境上下文
查看>>
AndroidSdk下载地址和环境变量配置
查看>>
使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法
查看>>
Android四大组件与进程启动的关系(转)
查看>>
array_walk与array_map的区别
查看>>