我搜索了很多,但没有找到相同的地方: 如果在这种情况下达到最大容量,则哈希图调整大小如何工作? 是否由于无法增加最大大小(2 << 30)而抛出异常?
答案 0 :(得分:3)
查看源代码,它只是停止调整自身大小以超过最大大小。
这意味着(如果您甚至可以在不先耗尽内存的情况下达到这一点),则不会获得任何其他存储桶。但是无论如何您都无法获得更多的收益,因为hashCode
返回了int
,并且在2 ^ 30的情况下,您已经大大超出了该范围。 Java中的数组也不能超出int
的索引范围(并且HashMap存储桶存储在数组中)。
再次假设您有足够的内存,则可以继续添加更多元素,它们只会“碰撞”到相同的存储桶中。