可以存储在HashMap中的键(对象)数量的理论限制?

2022-09-01 03:10:19

可以存储在 HashMap 中的键条目数是否有理论限制,或者最大值是否完全取决于可用的堆内存?

另外,哪种数据结构最适合存储大量对象(例如数十万个对象)?


答案 1

可以存储在HashMap中的密钥条目的数量是否有理论限制,还是完全取决于可用的堆内存?

看看该类的文档,我会说理论极限是(231-1 = 2147483647)元素。Integer.MAX_VALUE

这是因为要正确实现此类,size() 方法必须返回表示键/值对数的函数。int

来自 HashMap.size() 的文档

返回:此映射中的键值映射数

注意:此问题与列表最多可以保存多少数据非常相似。


哪种数据结构最适合存储大量对象(比如几十万个对象)?

我会说这取决于您需要存储的内容以及所需的访问权限类型。所有内置的集合可能都针对大量产品进行了很好的优化。


答案 2

HashMap保存数组中的值,该数组最多可以容纳 。但这还不包括碰撞。每个都有一个字段,该字段也是一个条目。这就是解决冲突(两个或多个具有相同哈希码的对象)的方法。所以我不会说有任何限制(除了可用内存)Integer.MAX_VALUEEntrynext

请注意,如果超过 ,您将从某些方法(如 )中获得意外行为,但仍然有效。它们将起作用,因为任何对象都将返回一个 ,因此根据定义,每个对象都将适合映射。然后每个对象将与现有对象发生冲突。Integer.MAX_VALUEsize()get()put()hashCode()int


推荐