我知道这是由系统中可用的内存决定的,也取决于一个好的散列函数,但总的来说,我想知道你用过的最大的地图是什么,以及它是否开箱即用或者需要进行任何调整以使其充分发挥作用。
问问题
11131 次
1 回答
15
Java 中的AHashMap
最多可以有 2^30 个桶来存储条目 - 这是因为使用的桶分配技术java.util.HashMap
要求桶的数量是 2 的幂,并且由于 int 在 Java 中是有符号的,因此最大正值是 2^31 - 1,所以 2 的最大幂是 2^30。
但是,实际上对于您可以在 HashMap 中存储多少键/值对没有编程限制 -size()
一旦您通过 2^31 - 1,该函数将停止准确。这是因为处理冲突的方式 - 键位于同一存储桶中的 /value 对是链接的,就像 a 中的节点一样LinkedList
。
但是,一般来说,如果您在实际应用程序中需要跟踪的内容接近 2^30 项,那么您需要的 RAM 比在一台机器上依赖的要多得多。我曾经在单个 JVM 中使用过的最大的 HashMap 有几千万个条目,都非常轻量级
于 2013-11-10T03:54:46.053 回答