HashMap原理(先大概了解一下,过段时间再学习)

面试被问到,空口无言,今天看了几篇博客,有了初步了解,打算记录一下。
HashMap底层是由数组+链表实现的, 数组的特点是查询快,增删慢,链表的特点是查询慢,增删快(详见:数组和链表区别
HashMap底层结构如下图:
HashMap原理(先大概了解一下,过段时间再学习)
数组的每个元素都可以是链表的头。
插入元素
因为每个元素都是entry<k,v>形式,在hash表中是根据对象hashcode值确定其位置的,所以当插入时,需要先根据key的hashcode值找到在索引中的位置,如果该位置已经有元素,用equals方法必较两个元素的key,如果返回true,则新元素将覆盖旧元素的value值,如果返回false,则新元素与旧元素一起构成链表,并且,新元素处于链表头部。
读取元素
同样的,读取元素也需要先根据元素的key,找到其在数组中的位置,然后通过equals方法在链表中比对key,返回true,即找到元素