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()的值再结合数组长度进行无符号右移(>>>),按位亦或,按位与(&)计算出索引。我们还可以用取余、平方取中法、伪平方法,之所以不用其他算法是因为其他算法运算更多效率比较低,而对数据进行位运算效率都比较高,运算相对较少