如果给定2 ^ 30的初始大小且负载因子= 1,则HashMap中会发生什么?

时间:2019-07-12 08:00:04

标签: java collections hashmap

我搜索了很多,但没有找到相同的地方: 如果在这种情况下达到最大容量,则哈希图调整大小如何工作? 是否由于无法增加最大大小(2 << 30)而抛出异常?

1 个答案:

答案 0 :(得分:3)

查看源代码,它只是停止调整自身大小以超过最大大小。

这意味着(如果您甚至可以在不先耗尽内存的情况下达到这一点),则不会获得任何其他存储桶。但是无论如何您都无法获得更多的收益,因为hashCode返回了int,并且在2 ^ 30的情况下,您已经大大超出了该范围。 Java中的数组也不能超出int的索引范围(并且HashMap存储桶存储在数组中)。

再次假设您有足够的内存,则可以继续添加更多元素,它们只会“碰撞”到相同的存储桶中。