HashMap底层原理与手写实现

HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。HashMap储存的是键值对,HashMap很快。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。也可以看作是数组和链表结合组成的复合结构。

put原理:

当执行HashMap.put方法时,把key经过hash算法,然后插入,如果已经有值,那么 entry next指向新插入的,新插入的next为null

代码实现:通过hash算法,得到index,然后插入到对应的坐标中。

get原理:

当执行HashMap.get方法时,把key经过hash算法,然后去查找,如果查到则返回value,如果没有查到则返回null

代码:通过hash算法,得到index,然后去对应的坐标中查找并返回值。

扩容:

“如果HashMap的大小超过了负载因子(load factor)定义的容量,默认的负载因子大小为0.75,也就是说,当一个map填满了75%的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍的新数组(jdk1.7,但不超过最大容量),来重新调整map的大小,并将原来的对象散列到新数组中。

代码实现:当使用数量大于数组大小*负载因子时,那么开始扩容

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值