2021-04-12

HashMap学习笔记

1:JDK1.7与JDK1.8区别

1.7底层的数据结构是数组+链表
1.8底层的数组结构是数组+链表+红黑数
1.7 插入元素时 如果出现哈希冲突采用的是头插法
1.8 插入元素时 如果出现哈希冲突采用的尾插法

1.7在多线程情况下进行扩容操作时,有可能会出现链表循环。从而造成程序死循环。

2:为什么数组大小要设置位2的n次幂

底层数组之所以设置成为2的n次幂,是因为我们再利用key的hash值(HashMap重写了hash方法)与数组长度减一进行&运算时,只有数组长度为2的n次幂是,效果才等同于取模操作。

&运算得速度要远高于取模操作。

3:扩容时,旧数组元素如何放入新数组

扩容时,数组长度为变为原来得两倍
通过遍历原数组
通过结点元素的hash值与原数组长度进行&运算,为0的放在新数组低位,为1的放在新数组高位
巧妙的实现了概率学上能做到五五开的分部

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值