HashMap实现原理

之前面试,有大量公司问了这个问题,坐标上海,所以这里记一下。

首先,HashMap使用的是 数组+链表 的数据结构进行存储。

HashMap在存储元素的时候,首先对key进行一个HashCode()方法,然后将这个元素存入到数组中,如果发现当前数组中已经有元素,即为hash冲突,此时会以数组中当前元素为首开辟一个链表,调用key的equals()方法将数据存入。

获取元素时,通过key的hashCode()方法可以找到元素存放在数组中的位置,如果发现存在多个元素(链表中),则调用key的equals方法找到具体的元素返回。

 

因为可能存在hash冲突,所以在重写hashcode方法时也最好重写equals方法。

 

对于数组中的每一个元素下的链表,它们的hashCode值一定是相同的。如果两个对象连hashCode都不相等,那这两个对象一定不等。即:

两个对象hashCode相等,equals相等,两个对象才相等;相反,两个对象相等,则hashCode和equals一定相等。

两个对象hashCode不相等,那不用比较equals了,两个对象一定不相等;而两个对象不相等,则hashCode可能相等,但equals一定不相等。

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值