首先要了解HashMap的扩容过程,我们就得了解一些HashMap中的变量:
Node<K,V>:链表节点,包含了key、value、hash、next指针四个元素
table:Node<K,V>类型的数组,里面的元素是链表,用于存放HashMap元素的实体
size:记录了放入HashMap的元素个数
loadFactor:负载因子
threshold:扩容的阈值,决定了HashMap何时扩容,以及扩容后的大小,一般等于,等于 table * loadFactor
HashMap使用的是懒加载,构造完HashMap对象后,只要不进行put方法插入元素之前,HashMap并不会去初始化或者扩容table。
当首次调用put方法时,HashMap会发现table为空然后调用resize方法进行初始化,当添加完元素后,如果HashMap发现size(元素总数)大于threshold(阈值),则会调用resize方法进行扩容
若threshold(阈值)不为空,table的首次初始化大小为阈值,否则初始化为缺省值大小16
因此,table中的元素只有两种情况:
元素hash值第N+1位为0:不需要进行位置调整
元素hash值第N+1位为1:调整至原索引的两倍位置
扩容或初始化完成后,resize方法返回新的table
以上就是极悦小编介绍的"HashMap之扩容机制",希望对大家有帮助,想了解更多可查看Java基础教程,如有疑问,请在线咨询,有专业老师随时为您服务。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习