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