HashMap的实现

get() 与 put()方法?

HashMap中存储数据是用一个类型是Entry的数组,而Entry则是保存键值对的数据结构,并且有本身类型的next变量,可以构成链表。HashMap存储数据时,首先根据key的hashcode值找到应该保存在table数组的下标位置(bucket的位置),如果该位置之前没有保存过值,也就是没有发生碰撞,则保存这个键值对对象到该位置中;如果发生了碰撞,也就是说有两个对象的key的hashcode值相等,那么则需要通过key的equals方法判断这两个对象是否是同一个对象,如果是,那么原本存储的旧值会被新值所替换;如果不是同一个对象,则把新的键值对对象保存到旧的键值对对象next节点中,构成链表。

equals()和hashCode()的都有什么作用?

通过对key的hashCode()进行hashing,并按照用key的hashcode值按位与上数组长度,计算下标( length-1 & hash值),从而获得buckets的位置。如果产生碰撞,则利用key.equals()方法去链表或树中去查找对应的节点

注意:key的hashcode()方法用来找到Entry对象所在的桶;如果两个key有相同的hash值,他们会被放在table数组的同一个桶里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值