Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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哈希映射中存储50MB的字符串类型键值对数据吗_Java_String_Hashmap_Size - Fatal编程技术网

我可以在Java哈希映射中存储50MB的字符串类型键值对数据吗

我可以在Java哈希映射中存储50MB的字符串类型键值对数据吗,java,string,hashmap,size,Java,String,Hashmap,Size,我想在Java哈希映射中存储大约500万个唯一字符串。键和值将是相同的字符串。字符串的最大长度为15个字符(ASCII)。稍后我想查找哈希映射中是否存在特定字符串 对于上述场景,我是否需要担心内存大小问题。我猜它不需要超过75MB到150MB的内存 提前谢谢 键和值将是相同的字符串 当其键和值相同时,使用映射是多余的。您应该使用集合,尤其是如果您只计划使用包含 关于您对空间的关注,让我们假设每个字符串的长度为15个字符 假设您使用的是Java 9,拉丁1字符只需要一个字节,因此500万个唯一的字

我想在Java哈希映射中存储大约500万个唯一字符串。键和值将是相同的字符串。字符串的最大长度为15个字符(ASCII)。稍后我想查找哈希映射中是否存在特定字符串

对于上述场景,我是否需要担心内存大小问题。我猜它不需要超过75MB到150MB的内存

提前谢谢

键和值将是相同的字符串

当其键和值相同时,使用
映射
是多余的。您应该使用
集合
,尤其是如果您只计划使用
包含

关于您对空间的关注,让我们假设每个
字符串的长度为15个字符

假设您使用的是Java 9,拉丁1字符只需要一个
字节
,因此500万个唯一的
字符串
s最多需要
75\u 000
字节或
75 MB


Java 8及其以下版本使用
char[]
返回其
字符串
s,因此在这种情况下,基本上需要两倍的内存。

请确保将最大堆大小
-Xmx
设置为大于150MB……另外,请看一下这个例子,可以使用集合吗?我需要担心75MB的大小吗,还是完全没问题。我想我正在使用Java8。我是java新手,对版本的效果不太了解。最好使用
集,因为它有
映射
,但它的值未被使用(比复制
字符串
的内存少)<只要您能够分配足够的堆空间(我假设您可以这样做),代码>75MB应该很好。对于Java 8,单独使用
最多需要
150 MB(加上一些开销)。@JacobG.你说得对,你应该使用
,但不是因为你说的原因。如果将同一实例设置为key和value,则大小不会增加两倍,因为只设置了引用,并且该大小与后面字符串的长度无关,例如
字符串的长度。您应该使用
集合
,因为它向代码的读者显示了您正在做的事情,否则您可能会对为什么还要将键设置为值感到困惑。JLS:“类字符串的实例表示Unicode代码点的序列。”如果您的字符串包含超出拉丁语1所能表示的字符,在Java9中,每个字符将占用两个字节。