HashMap底层执行原理

HashMap底层执行原理

HashMap数据结构

数组、链表、红黑树

HashMap底层是由一个数组来存储的,默认大小为16个,但是系统会对其进行扩容。每个位置数组的下标有是分散的。

特点

1、快速存储

2、快速查找(直接通过下标处理,复杂度为o(1))

3、可伸缩(数组大小可以扩容、每个位置存储的数据可以是多个)

hash值计算

所有对象都有hashCode(使用key的),我们使用是通过key的。

计算方法:hashCode与hashCode得到的值向右移16位得到的值,进行异或运算。这样可以保证得到的hash值足够的分散

数组下标:hash%16

hash冲突

原因:我们计算出的hash值然后转换位数组下标可能出现重复的情况,为了解决这种情况,hashMap引用了链表来存储hash值重复的情况,将其插入到链表的尾部,但是当hash值相同的数据较多时,存取效率会比较低,因此,在JAVA8之后引入了红黑树(二叉树),当链表长度大于8的时候,就会转换使用红黑树,

hashMap扩容

扩容机制:当hashMap数组中的数据达到75%的时候,数组增长1倍。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值