初学JAVA的时候,就记得有句话两个对象的hashCode相同,不一定equal,但是两个对象equal,hashCode一定相同,当时一直不理解是什么意思,最近在极客时间上学习了课程《数据结构与算法之美》中的数组、链表和散列表,突然有点明白了这个点,也明白了JAVA中的hashMap原理。

数组的优点就是可以根据下标随机查询数据,散列表的底层就是用数组实现的,所以也有这个优点,但是同时也有插入删除需要大量移动数据的弊端,JAVA中的HashMap就巧妙地综合了数组根据下标随机查找数据的优点和链表快速插入删除数据的优点。散列表解决冲突的办法有线性寻址法和链表法,HashMap用到的是链表法解决散列冲突,HashMap的实现原理如下:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 java数据结构之hashMap 算法

每次插入一个元素的时候,会根据HashCode取余数组长度来计算数组下标,如果数组下标为空,直接插入,如果有值,遍历这个下标下的链表,如果存在与插入元素相同的元素,直接覆盖,否则插入链表尾部。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄