HashMap底层执行原理
HashMap数据结构
数组、链表、红黑树
HashMap底层是由一个数组来存储的,默认大小为16个,但是系统会对其进行扩容。每个位置数组的下标有是分散的。
特点
1、快速存储
2、快速查找(直接通过下标处理,复杂度为o(1))
3、可伸缩(数组大小可以扩容、每个位置存储的数据可以是多个)
hash值计算
所有对象都有hashCode(使用key的),我们使用是通过key的。
计算方法:hashCode与hashCode得到的值向右移16位得到的值,进行异或运算。这样可以保证得到的hash值足够的分散
数组下标:hash%16
hash冲突
原因:我们计算出的hash值然后转换位数组下标可能出现重复的情况,为了解决这种情况,hashMap引用了链表来存储hash值重复的情况,将其插入到链表的尾部,但是当hash值相同的数据较多时,存取效率会比较低,因此,在JAVA8之后引入了红黑树(二叉树),当链表长度大于8的时候,就会转换使用红黑树,
hashMap扩容
扩容机制:当hashMap数组中的数据达到75%的时候,数组增长1倍。