【发布时间】:2012-04-02 23:20:18
【问题描述】:
我需要在内存中保存并查找一百万个均匀分布的整数。
我的工作量非常密集。
我当前的实现使用 HashSet (Java)。我看到了良好的查找性能,但内存使用并不理想(几十 MB)。
您能想出更高效的(内存)数据结构吗?
编辑:该解决方案将需要支持对数据结构的少量添加。
背景:
上述整数问题是以下问题的简化:
我有一组一百万个字符串(我的“字典”),我想知道字典是否包含给定的字符串。
字典太大而无法放入内存,因此我愿意牺牲一点点准确性来减少内存占用。我将通过切换到包含每个字符串的哈希码值(整数)而不是实际字符的字典来做到这一点。我假设每个字符串发生冲突的可能性仅为1M/2^32。
【问题讨论】:
-
可能是Bloom filter 的工作吗?
-
您是否需要
insert操作,或者字典是否只构建一次并且在查找期间不再修改? -
@Gareth Rees:您为什么不将其发布为答案,以便对其进行投票?
-
@Andre - 感谢您的细心阅读。我确实犯了一个错误,没有明确说明解决方案需要支持对数据结构的少量添加。
标签: java memory-management data-structures hashcode