- 0
- 0
- 约小于1千字
- 约 1页
- 2026-09-21 发布于北京
- 举报
我跟大家说一下,hashmap底层是基于数组来实现的的数据结构,如果是用数组的话,
就天然会有一个问题,就跟ArrayList一样,就是数组如果满了,就必须要扩容,hashmap所
以也是有扩容的问题存在的
这一讲我们先不看源码,先来画图说一下hashmap扩容的原理
非常简单,2倍扩容+rehash,每个key-value对,都会基于key的hash值重新寻址找到新
数组的新的位置
本来那个数组的长度假设是16,现在的话新数组的长度是32
本来所有的key的hash,对16取模是一个位置,比如说是index=5;但是如果对32取模,
可能就是index=11,,位置可能变化
问你,hashmap扩容的原理,数组,一次扩容多大,2倍,rehash过程,基于key的hash值
重新在新的数组里找到新的位置,很多key在新数组的位置都不一样了,如果是之前的
这个key可能就会在新的数组里分布在不同的位置上了
这个原理大体上是JDK1.7以前的原理,现在的话呢,JDK1.8以后,都是数组大小是2的n
次方扩容,用的是与操作符来实现hash寻址的算法,来进行扩容的时候,rehash
原创力文档

文档评论(0)