关于hashmap扩容的疑问

发布于 2022-09-05 09:10:36 字数 220 浏览 17 评论 0

我用的jdk1.7。在测试HashMap的时候的疑问:
HashMap的默认的容量是16,加载因子是0.75,如果我往map中添加的元素大于16*0.75是不是就会第一次扩容。可是我循环往hashmap中添加元素,添加13个或者14个,也不会扩容啊
还有一个问题,我就put了三个值,但是打断点,却执行put执行了20多次;还有,在new hashMap后,put之前,也执行了resize方法,也就是扩容的方法。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天涯离梦残月幽梦 2022-09-12 09:10:36

我又仔细调试了下,大概原因找到了。
1.扩容的条件是两个

if ((size >= threshold) && (null != table[bucketIndex])) {
            resize(2 * table.length);
            hash = (null != key) ? hash(key) : 0;
            bucketIndex = indexFor(hash, table.length);
        }

通过跟踪发现,虽然size>=threshold,但是第二个条件不满足。所以没有进行扩容。也就是该bucketIndex的索引位置不存在元素。
2.提问中提到:在new hashMap后,put之前,也执行了resize方法,也就是扩容的方法。但是,仔细调试后发现,在new hashMap之前就执行了put和扩容。如图,存放的是这些值:
图片描述
应该是类加载阶段做的一些操作。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文