HashMap的工作原理以及解决哈希冲突的方法

**1、**HashMap的工作原理? (如何哈希 put)
HashMap基于hashing原理,通过put()和get()方法储存和获取对象。当将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。
当两个不同的键对象的hashcode相同时会发生什么? 它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。
Put:
1) 先检查当前所有键值对中是否存在该键,键相等,值替换。
2) 检查是否是key=null
3) 调用键对象的hashCode()方法来计算hashcode,通过键对象的equals()方法比较
4) 若有效个数/数组长度>=0.75(扩容因子)
5) 需要扩容,2倍扩容
6) 重新哈希,new数组
重新哈希

2、解决哈希冲突的方法
1)线性探测法:
给数组根据余数找对应的下标,放值,若改下标已经有值,继续寻找下一个空位,若数组已满,对数组进行2倍扩容(参考0.75)
2)链地址法:
不带头节点的单链表,采用头插,当一个地址后面链的值太多,如节点>8时,便采用二叉树形式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值