数据结构
如下图所示,HashMap是利用数组与链表结合的形式构建的。竖列为数组结构,默认初始数量为16(1<<4)个,横列为链表结构用于解决散列冲突的问题。当数组中有值得元素超过了装载因子的比例(默认为0.75)时,会引发扩容的操作。此操作是为了避免元素过满时引起的链表长度过长,从而影响查找性能。
上图为jdk1.7之前的实现,jdk1.8实现方法是当某一个桶中的元素个数超过了8时,将此桶中的链表构建成红黑树。
Hashmap 实现方式 jdk1.7 和 1.8区别
hashmap 是很常用的一种集合框架,其底层实现方式在 jdk1.7和
jdk1.8中却有很大区别,今天我们通过看源码的方式来研究下它们之间的区别。
hashmap 是用来存储数据的,它底层数据结构是数组,数组中元素是链表或红黑树,通过对 key 进行哈希计算等操作后得到数组下标,把
value 等信息放在链表或红黑树存在此位置。如果两个不同的 key
运算后获取的数组下标一致,就出现了哈希冲突。数组默认长度是16,如果实际数组长度超过一定的值,就会进行扩容。在我看来,1.7和1.8主要在处理哈希冲突和扩容问题上区别比较大。