Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哈希表的内容如何影响其在内存中的大小?_Java - Fatal编程技术网

Java 哈希表的内容如何影响其在内存中的大小?

Java 哈希表的内容如何影响其在内存中的大小?,java,Java,如果哈希表A有500万个键映射到500万个唯一值,哈希表B有500万个键映射到20个唯一值,那么与哈希表B相比,哈希表A使用的内存大约要多多少 所有键和值都是长度约为20-50个字符的字符串 我最初的猜测是,哈希表A占用的空间大约是哈希表B的两倍,但如果包含映射,则哈希表B将使用: (500万个键+500万个映射+20个值)/(500万个键+500万个映射+500万个值)=.66 哈希表A使用了66.6%的内存。但是,如果键和值是字符串,我不知道映射是否会使用与键或值一样多的空间 注释?我认为这

如果哈希表A有500万个键映射到500万个唯一值,哈希表B有500万个键映射到20个唯一值,那么与哈希表B相比,哈希表A使用的内存大约要多多少

所有键和值都是长度约为20-50个字符的字符串

我最初的猜测是,哈希表A占用的空间大约是哈希表B的两倍,但如果包含映射,则哈希表B将使用:

(500万个键+500万个映射+20个值)/(500万个键+500万个映射+500万个值)=.66

哈希表A使用了66.6%的内存。但是,如果键和值是字符串,我不知道映射是否会使用与键或值一样多的空间


注释?

我认为这与哈希表没有多大关系,因为哈希表的“值”只是对我假设的现有值的引用。总成本的增加主要取决于价值的大小。毕竟,您可以将每个键映射为null


此外,这可能会产生影响,也可能不会产生影响,具体取决于钥匙的大小。例如,从500万个重对象(如字符串)映射到500万个轻对象(如整数)与将500万个重对象映射到20个不同的整数值没有多大区别。

如果您存储的是文字字符串,JVM可能会将其插入,在这种情况下,20键版本将使用更少的内存(我不知道如何计算)。但对于不受这种魔力影响的标准哈希表实现,它们都将使用相同的内存量,因为每个“bucket”将存储一个值,而不管该值是否也存储在其他bucket中