HashMap的原理

HashMap的原理

 HashMap底层是一个链表散列的数据结构,也就是数组加上链表的结构。
 当我们调用put方法加入一个entry的时候,首先会对entry的key值进行hashCode计算,从得到的hash值算出这个entry需要被插入到数组的哪一个下标位置。计算的方式是hash & (length - 1),hashMap的数组长度永远是2^n所以,length-1 的二进制形式就是111111,这样保证所有的下标位置都能有数据插入。
如果计算出来的下标位置已经有entry了,那么就用链表形式的结构,将下标相同的entry都放入这条链表上。
 读取元素和插入的原理相同,找到key值对应的下标位置,然后遍历这条链表上的所有元素,进行equals判断,如果相等,那么返回这条数据。
 HashMap的resize,hashMap的初始大小默认是16,负载因子默认0.75。为了提高查询效率,避免链表太长效率太低,所以当数组的占用超过了length*负载因子,那么hashMap就会扩容,让数组长度翻倍。同时数组长度变化了,那么每一个entry计算的下标自然不一样了,也就是所有的entry都需要被重新排序插入。这个是一个很大的性能消耗,如果我们能够预先知道我们的hashMap大概会存储多少数据,那么就可以提前构建一个合适大小和负载因子的HashMap,从而优化性能了。

参考文章:HashMap原理总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值