hashmap面试【学习笔记】

HashMap

底层结构,1.7与1.8异同

1.7:数组+链表

1.8:数组+(链表 红黑树)



为什么要使用红黑树?为什么不一开始就树化?树化的阈值为什么是8?什么时候会树化?什么时候退化成链表?

  • 查找效率高、避免DoS攻击
  • 链表比较短的时候 不需要树化,红黑树占用内存多一些
  • 在负载因子0.75的情况下,长度超过8的链表出现概率极低(0.00000006),所以选择8是为了让树化几率足够小
  • 当一个链表长度大于8的时候,会先扩容(所以链表长度是有可能超过8的),来解决链表过长问题

如果集合长度超过64,依然存在链表长度大于8,才会转变为红黑树

  1. 集合扩容可能会拆分红黑树,当树元素<=6就会退化链表
  2. remove树节点时,若root、root.left、root.right、root.left.left有一个为Null,也会退化为链表


索引如何计算?hashCode存在,为什么还要提供hash()方法?数组容量为何是2的n次幂

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值