假设我有一个HashMap<String, Integer>
关键字是单词,值是它们在语料库中的频率。"hello"
用某个整数(例如由 表示)替换单词是否会节省内存,1
而不是创建一个HashMap<Integer, Integer>
?一般来说,整数占用的空间比字符串少,但我不知道这是否适用于 HashMap 的键,因为键通过哈希函数。提前致谢!
问问题
186 次
2 回答
1
就 .HashMap
而言,替换String
为Integer
.
这是因为HashMap
在其 KV Pair 中存储了 key 和 value 的引用值,并且String
key 将引用对象而不是引用Integer
对象。
出于所有意图和目的,Integer
对象和String
对象的散列对 HashMap 的存储能力没有任何影响。
于 2013-07-16T22:05:28.390 回答
0
是的当然。即使 String 为空,Integer 也比 String 小,因为 'int' 小于对 'char[]' 的引用加上偏移量、长度和哈希码的更多 'ints'。如果你使用 Integer.valueOf() 也有缓存,但是当然还有通过常量池的字符串缓存。
但是,除非您有数百万个条目,否则效果可以忽略不计,因此您应该使用适合该程序的任何键。
于 2013-07-16T22:19:36.607 回答