简单理解HashMap原理

1,为什么要写这个?
作为java程序员,这个问题在面试中有很大的概率被问到,然而,我们也并不需要把其中的原理详细讲出来,讲个八九不离十就行了;官方中看的可能比较艰涩难懂,我就用自己的话来写出来,面试中被问到这些也就够了!


2,hashmap 底层是基于数据和链表结构的,在存储的时候,根据key来计算hashcode,然后根据hashcode的一系列运算(取hashcode的后四位与4个1进行与运算),然后就确定了存储的位置(可以想象成数组的一个位置).(这里其实还有一个问题,就是计算后四位会可能会有相同的值,就是所谓的hash碰撞,发生碰撞后,由key计算的结果相同的键值对会放在同一个位置,他们,组成串,其实就是横着的是数组结构,也就是计算后的位置,竖着的就是当他们发生碰撞后组成的链表),HashMap初始容量是16,负载因子是0.75,也就是说当存储超过16*0.75=12的时候,hashmap会扩容,翻倍,16*2=32;(为什么会扩容,就是因为系统认为,当容量达到这个值得时候,出现hash碰撞的概率会很大,为了避免这个情况的出现,然后就出现了扩容)扩容后的hashmap计算key值发生了改变,原来取hashcode的后4位,现在取其中的后5位来计算.扩容后的位置会重新计算,是一个新的组合.


3,面试中还被问到了hashset的原理,面试官一点都不按常理出牌,其实hashset原理和hashcode原理相似,只是hashset的value值为null;
这些东西说出来,面试足够了!

简单理解HashMap原理