HashMap底层探索(一)

hashmap
首先介绍hashmap的特点
1.存取是无序的
2.键值唯一的可以是null 但是键位置只能有一个是null
3.键的位置是唯一的,底层的数据结构控制键的
4.JDK1.8以前呢hashmap的结构是数组+链表 1.8以后是链表+数组+红黑树(数组或红黑树 当链表个数阈值大于8时会转换为红黑树 反之会转换回我们的链表)
5.链表阈值》8并且数组长度大于64时,才会将链表转换成红黑树(缺一不可),变为红黑树的目的就是为了高效的查询
6.当链表阈值《6 时转换成数组避免来回转换浪费性能

hashmap 集合在创建对象得时候,在jdk1.8之前长度 为16的entry[] table数组,用来存储键值对的,在1.8以后就不是在创建对象时调用构造方法,而是在第一次put的时候生成 node[] table , node[] table 底层其实还是entry[] table 没什么大的区别
面试常问考点:
hashMap底层采用什么算法进行hash值?还有哪些方法可以计算?
答:底层采用了hashmap 中的key 的String 方法中的hashcode()的值再结合数组长度进行无符号右移(>>>),按位亦或,按位与(&)计算出索引。我们还可以用取余、平方取中法、伪平方法,之所以不用其他算法是因为其他算法运算更多效率比较低,而对数据进行位运算效率都比较高,运算相对较少

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值