与字符串相比,整数在java HashMap中作为键占用的空间少吗?

与字符串相比,整数在java HashMap中作为键占用的空间少吗?,java,string,hash,hashmap,Java,String,Hash,Hashmap,假设我有一个HashMap,其中键是单词,值是它们在语料库中的频率。将单词替换为某个整数(例如,“hello”由1表示)并创建HashMap,是否节省内存?通常,整数比字符串占用更少的空间,但我不知道这是否适用于HashMap的键,因为键通过哈希函数。提前谢谢 就HashMap而言,用Integer替换String时,内存使用没有区别 这是因为HashMap将键和值的参考值存储在其KV对中,而不是引用String对象,键将引用Integer对象 出于所有目的,对Integer对象和String对

假设我有一个
HashMap
,其中键是单词,值是它们在语料库中的频率。将单词替换为某个整数(例如,
“hello”
1
表示)并创建
HashMap
,是否节省内存?通常,整数比字符串占用更少的空间,但我不知道这是否适用于HashMap的键,因为键通过哈希函数。提前谢谢

HashMap
而言,用
Integer
替换
String
时,内存使用没有区别

这是因为
HashMap
将键和值的参考值存储在其KV对中,而不是引用
String
对象,键将引用
Integer
对象


出于所有目的,对
Integer
对象和
String
对象进行散列不会对HashMap的存储能力产生任何影响。

当然可以。即使字符串为空,整数也比字符串小,因为“int”小于对“char[]”的引用加上偏移量、长度和哈希代码的更多“int”。如果使用Integer.valueOf()还可以进行缓存,当然也可以通过常量池进行字符串缓存


然而,除非你有数以百万计的条目,否则效果可以忽略不计,所以你应该选择适合程序的任何键。

java中Intger的哈希代码等于该值,因此我假设它更有效“就哈希映射而言”,这都是真的,但这不是他的问题。实际上,这似乎是他的问题,@EJP。你的答案无关紧要。Java对象(Integer和String都是)通过引用传递(并作为引用维护)。我说了一句话:“一般来说,整数占用的空间比字符串少,但我不知道这是否适用于HashMap的键,因为键通过哈希函数传递。”我的回答是HashMap的键不受键类型大小的影响,因为它只是一个引用。