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