HashMap和ArrayList的一些问题

HashMap:

HashMap底层数据结构,1.7和1.8有什么不同?

  • 1.7的底层是数组+链表结构,1.8底层是数组+链表+红黑树。

HashMap扩容机制

  • 起始大小为16,loadFactor默认为0.75,阈值是16*0.75=12。超过阈值后,就把数组大小扩大一倍
  • 链表树化的条件:数组大小大于等于64,链表长度大于8,要满足这两个条件链表才能变成红黑树
  • 若在没有红黑树的条件下,添加元素后数组中某个链表长度大于8而数组长度未达到64,则链表不会树化,数组会扩容一倍。
  • 红黑树退化的条件:扩容拆分树时候树元素小于等于6,且红黑树的root,root.left,root.right,root.left.left结点任一为空,也会退化

HashMap中索引怎么计算?

  • 计算对象的hashcode,再调用HashMap的Hash方法进行二次哈希,最后对结果与数组大小进行取模运算(或与数组大小-1进行位与运算),二次哈希是为了让哈希分布更加均匀。

HashMap中put(),1.7和1.8有什么不同?

  • 1.7是头插法,1.8是尾插法
  • 1.7是大于等于阈值且数组没有空位时才扩容,1.8是大于阈值就扩容

HashMap是线程安全的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值