【发布时间】:2012-01-24 17:08:57
【问题描述】:
就在几分钟前,我回答了一个关于“Java 中 HashMap 的最大可能大小”的问题。正如我一直读到的,HashMap 是一个可增长的数据结构。它的大小仅受JVM内存大小的限制。因此我认为它的大小没有硬性限制并相应地回答。 (同样适用于 HashSet。)
但有人纠正我说,由于 HashMap 的 size() 方法返回一个 int,因此 限制了它的大小。一个完全正确的观点。我只是尝试在本地测试它但失败了,我需要超过 8GB 的内存才能在 HashMap 中插入超过 2,147,483,647 个整数,而我没有。
我的问题是:
- 当我们尝试将 2,147,483,647 + 1 个元素插入到 HashMap/HashSet?
- 是否抛出错误?
- 如果是,是哪个错误?如果 HashMap/HashSet 没有发生什么,它已经 现有元素和新元素?
如果有人有幸使用 16GB 内存的机器,您可以实际尝试一下。 :)
【问题讨论】:
-
属于 MapOverflow.com
-
您不需要 16 GB RAM。只需获取 64 位版本的 Windows 并创建一个页面文件供其余部分进行测试。
-
你查看过 HashMap 的源代码吗?然后,您将很快了解为什么它会被整数大小限制。
-
@ThomasJungblut:感谢您的评论,我会看看。但我试图弄清楚如果我们在其中插入超过整数限制数量的项目会发生什么。
-
@Kerrek:我不明白 - 只是另一个 SE 衍生产品?
标签: java collections size hashmap overflow