我希望能够在一个Map<String, MagicObject>
中存储大量的字符串,以便能够快速访问MagicObjects
。由于这个Map中有很多条目,所以内存成为了瓶颈。假设MagicObjects
无法优化,那么在这种情况下我应该使用哪种最有效的Map类型?我目前正在使用以下内容:
gnu.trove.map.hash.TCustomHashMap<byte[], MagicObject>
我希望能够在一个Map<String, MagicObject>
中存储大量的字符串,以便能够快速访问MagicObjects
。由于这个Map中有很多条目,所以内存成为了瓶颈。假设MagicObjects
无法优化,那么在这种情况下我应该使用哪种最有效的Map类型?我目前正在使用以下内容:
gnu.trove.map.hash.TCustomHashMap<byte[], MagicObject>
我来晚了,但这个问题在相关搜索中出现引起了我的兴趣。我通常不回答Java问题。
Map中有太多的条目,内存成为了瓶颈。
我对此表示怀疑。
要使内存中字符串的存储成为瓶颈,您需要有大量的唯一字符串[1]。为了让事情更清楚,我最近使用了一个包含180万个单词(180万个唯一的英文单词)的字典,在运行时它们占用了大约1.6MB的RAM。
如果您将字典中的每个单词都用作键,则仍然只使用1.6MB的RAM[2]来存储键,因此内存不能成为瓶颈。
我怀疑您正在经历字符串匹配的O(n^2)性能问题。我的意思是随着添加更多的键,性能呈指数级下降[3]。如果您使用字符串作为键,则无法避免这种情况。
如果您想加快速度,请将每个键存储到不存储重复项的哈希表中,并使用哈希键作为映射的键。
注:
[1] 我假设这些字符串都是唯一的,否则你就不会尝试将它们用作映射键了。