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

时间:2013-07-16 21:54:16

标签: java string hash hashmap

假设我有一个HashMap<String, Integer>键,其中的词和值是词语中的频率。是否可以节省内存来替换带有某个整数的单词(例如"hello"1表示),而是创建HashMap<Integer, Integer>?通常,整数占用的空间比字符串少,但后来我不知道是否可以应用于HashMap的键,因为键经过哈希函数。提前谢谢!

2 个答案:

答案 0 :(得分:1)

HashMap而言,将String替换为Integer时,内存使用量没有差异。

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

对于所有意图和目的,Integer对象和String对象的散列对HashMap的存储功能没有任何影响。

答案 1 :(得分:0)

是的,当然。即使String为空,Integer也小于String,因为'int'小于对'char []'的引用加上对于offset,length和hash code的更多'int'。如果你使用Integer.valueOf()也有缓存,但是当然还有通过常量池进行的字符串缓存。

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