HashMap底层简要分析

HashMap底层相关

  • 首先如果对HashMap不进行初始容量设置的话,HashMap的默认初始容量为162的幂次方。如果设置初始容量的话,需要考虑几种情况。HashMap中有默认的最大容量为1 << 30。
    • 初始容量大于最大容量:则初始容量会被赋值为最大容量
    • 初始值小于最大容量:如果该初始容量为2的幂次方不会做出改变。而如果不是则要初始容量要为大于该初始容量的最小2的幂次方数
    • 容量为2的幂次方的原因:哈希值是很大的。而HashMap的底层为数组+链表的形式。如果每个哈希值对应一个数组那是不可能的也会造成内存的极大浪费。因此我们需要对哈希值%数组长度确定数组位置。为了提升这一步的性能,这里运用要求数组长度必须是2的幂次方。这是因为对2的幂次方取余其实就是相当于(哈希值&(2的n次方 - 1)). 这一步正是其根本原因。
  • HashMap底层是基于拉链法。当对应的链表长度超过8时。这时首先会检查数组的长度,如果数组的长度超过64.就会将对应的链表转换为红黑树的数据结构。否则则会对数组进行扩容
  • 扩容机制: HashMap中有个负载因子loadFactor,默认值为0.75.当底层数组中元素大于等于容量大小*负载因子时,HashMap就会自动扩容。其中扩容大小为原来的两倍。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值