一、HashMap底层使用了3种结构
hash数组(定位)、链表(存储元素)、红黑树(存储元素,提高查询效率)
二、添加流程描述:
添加元素时,先为元素计算出一个hash值,再用hash值%数组长度得到元素位置,将元素(k:v)封装到Node对象中,添加到hash表中指定位置,后面添加元素时,如果元素位置相同,则将后面的元素添加到第一个元素的next节点上,形成链表,当链表达到一定条件时,链表会转为红黑树
三、hash数组
初始长度为16,阈值为0.75,当数组长度被使用0.75时,数组就会扩容到原来的2倍
四、源代码:
1、计算hash值
2、将元素添加到集合中
3、链表转为红黑树
五、问题:
问题一:
Object类中的hashCode方法每有方法体,在使用时会有什么效果?
问题二:
hash数组如何扩容?