假设我有一个HashMap<String, Integer>
键,其中的词和值是词语中的频率。是否可以节省内存来替换带有某个整数的单词(例如"hello"
由1
表示),而是创建HashMap<Integer, Integer>
?通常,整数占用的空间比字符串少,但后来我不知道是否可以应用于HashMap的键,因为键经过哈希函数。提前谢谢!
答案 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()也有缓存,但是当然还有通过常量池进行的字符串缓存。
然而,除非你有数百万条记录,否则效果可以忽略不计,所以你应该选择适合该计划的任何键。