HashMap底层实现原理

HashMap,一个非常常用的集合,Key,Value格式,其为hash表的具体体现

   其初始化方式有有三种,如以下所示:

    1,public HashMap(int initialCapacity, float loadFactor)

    2,public HashMap(int initialCapacity)

    3,public HashMap()

其中第一种初始化方式中,第一个参数为初始化大小,即数组大小,数组大小?什么数组大小?大家先看一段代码:

通过上面代码可以推测出,HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。具体转成图即为:

解释一下:hash值数组的中值来自map.put(key,value)中的key,首先会根据key,算出所对应的hash值,如果hash相同的话,判断其后的链表中是否有相同key,如果没有,新增一个值否则直接覆盖原来值并返回

当然如果,新增的时候需要判断长度是否大于初始化大小,如果大于原来长度,需要扩展到原来的二倍,然后重新计算key在链表中的位置,重新创建一个Entry并指向数组的散列桶索引位置

猜你喜欢

转载自my.oschina.net/lovexin/blog/1632401