首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

HashMap的兑现原理【Z】[转]

2012-12-21 
HashMap的实现原理【Z】[转]?? 从上图中可以看出,?HashMap?底层就是一个数组结构,数组中的每一项又是一个链

HashMap的实现原理【Z】[转]

?? 从上图中可以看出,?HashMap?底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个?HashMap?的时候,就会初始化一个数组。

?? 源码如下:

                null;??
              1. }??

              ?

              ?? 有了上面存储时的?hash?算法作为基础,理解起来这段代码就很容易了。从上面的源代码中可以看出:从?HashMap?中?get?元素时,首先计算?key?的?hashCode?,找到数组中对应位置的某一元素,然后通过?key?的?equals?方法在对应位置的链表中找到需要的元素。

              ??

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

              ?

              4.??? HashMap?的?resize?(?rehash?):

              ???当?HashMap?中的元素越来越多的时候,?hash?冲突的几率也就越来越高,因为数组的长度是固定的。所以为了提高查询的效率,就要对?HashMap?的数组进行扩容,数组扩容这个操作也会出现在?ArrayList?中,这是一个常用的操作,而在?HashMap?数组扩容之后,最消耗性能的点就出现了:原数组中的数据必须重新计算其在新数组中的位置,并放进去,这就是?resize?。

              ???那么?HashMap?什么时候进行扩容呢?当?HashMap?中的元素个数超过数组大小?<span lang

热点排行