hashMap底层原理面试简洁版

hashMap的底层是由数组,链表,红黑树组成 JKD1.8 1.当我们添加一个数据的时候,首先hashMap会初始化16个长度的数组 2.比如添加一个字符串a会调拿当前的k计算出他的哈希值,然后拿这个哈希值进行16取模就是得到余数就是他数组存储的索引位置,比如算出索引位置为1 3.判断当前1的位置上是否有数据如果没有直接存储,如果有数据这也是我们常说的哈希冲突,不一样的值计算出一样的索引位置,你不能直接赋值到该索引位置上因为会把前面的值给覆盖掉遇到这个问题就需要使用链表来进行存储,当他有数据的时候调用equals和当前k进行对比,返回true就直接覆盖这个k的value值,返回false创建一个entry对象,entry对象有3个主要的属性k,value,和next next就是用来指向下一个节点的地址的 这里的链表采用的是头插法所以第二个数据会插在第一个数据的前面 4.当前的索引链表长度大于8的时候数并且数组长度大于64的时候就会把链表转成红黑树的结构进行存储以便提高查询的速度
经验分享 程序员 微信小程序 职场和发展