我用的jdk1.7。在测试HashMap的时候的疑问:
HashMap的默认的容量是16,加载因子是0.75,如果我往map中添加的元素大于16*0.75是不是就会第一次扩容。可是我循环往hashmap中添加元素,添加13个或者14个,也不会扩容啊
还有一个问题,我就put了三个值,但是打断点,却执行put执行了20多次;还有,在new hashMap后,put之前,也执行了resize方法,也就是扩容的方法。
我用的jdk1.7。在测试HashMap的时候的疑问:
HashMap的默认的容量是16,加载因子是0.75,如果我往map中添加的元素大于16*0.75是不是就会第一次扩容。可是我循环往hashmap中添加元素,添加13个或者14个,也不会扩容啊
还有一个问题,我就put了三个值,但是打断点,却执行put执行了20多次;还有,在new hashMap后,put之前,也执行了resize方法,也就是扩容的方法。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
我又仔细调试了下,大概原因找到了。
1.扩容的条件是两个
通过跟踪发现,虽然size>=threshold,但是第二个条件不满足。所以没有进行扩容。也就是该bucketIndex的索引位置不存在元素。

2.提问中提到:在new hashMap后,put之前,也执行了resize方法,也就是扩容的方法。但是,仔细调试后发现,在new hashMap之前就执行了put和扩容。如图,存放的是这些值:
应该是类加载阶段做的一些操作。