如果我有Hashtable A有500万个键映射到500万个唯一值,并且我有Hashtable B有500万个键映射到20个唯一值,那么与Hashtable B相比,Hashtable A使用的内存大约是多少?
所有键和值都是大约20-50个字符的字符串。
我最初的猜测是,Hashtable A占用的空间大约是Hashtable B的两倍,但是如果你包含映射,那么Hashtable B会使用:
(500万个密钥+ 500万个映射+20个值)/(500万个密钥+500万个映射+ 500万个值)= .66
Hashtable A使用的内存的66.6%。但是,如果键和值是字符串,我不知道映射是否会使用与键或值一样多的空间。
评论
答案 0 :(得分:2)
我不认为这对哈希表有多大帮助,因为哈希表的“值”仅仅是对我假设的现有值的引用。总成本的增加主要取决于价值的大小。毕竟,您可以将每个键映射为null。
此外,根据您的按键大小,这可能会或可能不会产生影响。例如,从500万个重物(如字符串)到500万个较轻的物体(如整数)的映射与将500万个重物体映射到20个不同的整数值没有什么不同。
答案 1 :(得分:0)
如果你正在存储文字字符串,那么JVM可以实习它们,在这种情况下,20键版本将使用更少的内存(我不知道如何计算多少)。但是对于不受此类魔法限制的标准哈希表实现,它们都将使用相同数量的内存,因为每个“桶”将存储一个值,无论该值是否也存储在其他桶中。