0

假设我有一个HashMap<String, Integer>关键字是单词,值是它们在语料库中的频率。"hello"用某个整数(例如由 表示)替换单词是否会节省内存,1而不是创建一个HashMap<Integer, Integer>?一般来说,整数占用的空间比字符串少,但我不知道这是否适用于 HashMap 的键,因为键通过哈希函数。提前致谢!

4

2 回答 2

1

就 .HashMap而言,替换StringInteger.

这是因为HashMap在其 KV Pair 中存储了 key 和 value 的引用值,并且Stringkey 将引用对象而不是引用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 回答