Java--HashMap和HashSet实现机制详解

HashMap和HashSet都采用数组+链表+红黑树进行存储,并且HashSet是由HashMap实现的。
具体的底层实现机制为:

  • 创建对象时初始创建数组长度为16,临界值为0.75*16=12。
  • 当插入数据时会根据其哈希值进行存储,因此不是顺序存储。
  • 经过处理的哈希值(源码中返回)如果不相同,则在数组中添加。
  • 如果返回的处理后的哈希值是相同的,则进行equals判断,如果两个对象不相同,则插到链表中,equal相同则进行value值的替换。
  • 数组的扩容为2倍扩容,即数组中的数组个数达到临界值的时候,数组进行扩容操作,同时临界值同样变成新数组长度的0.75倍。
  • 数组长度最大为64,链表最大长度为8。
  • 如果链表达到最大长度,但是数组还没达到64时,还可以对链表进行插入数据,只不过每次链表中插入一个数据都会引起数组的扩容。
  • 当数组长度达到64并且数组中有链表长度达到8时(同时满足)则进行树化(转换为红黑树)进行存储。
  • 数据类型由 HashMap$Node 转变为 HashMap$TreeNode
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值