需要高效的内存存储方式来存储大量字符串(是:Java中的HAT-Trie实现)
我正在使用一大组 (5-20百万个) 字符串键 (平均长度为10个字符)
,这些键需要存储在内存中的数据结构中,该数据结构在恒定时间或接近恒定时间内支持以下操作:
// Returns true if the input is present in the container, false otherwisepublic boolean contains(String input)
就吞吐量而言,Java的Hashmap被证明是令人满意的,但占用了大量内存。我正在寻找一种内存效率高的解决方案,并且仍支持不错的吞吐量(与散列相当或几乎一样)。
我不在乎插入/删除时间。在我的应用程序中,我将仅执行插入操作(仅在启动时执行),随后将仅contains
在应用程序生存期内使用该方法查询数据结构。
我读到HAT-Trie数据结构最符合我的需求。我想知道是否有一个实现的库。
欢迎提供其他有关实现建议的建议。
谢谢。
回答:
对于您的约束而言,特里树似乎是个好主意。
一种“框外思考”的替代方案:
如果您有能力为缺少的字符串回答“现在”的可能性
编辑:如果您可以负担得起误报,请使用WizardOfOdds在评论中建议的Bloom过滤器。
对于k = 1,Bloom过滤器就像没有键的哈希表:每个“
bucket”只是一个布尔值,它指示是否存在至少一个具有相同哈希值的输入。如果可接受1%的误报,则您的哈希表可以小到大约100 *
2000万比特或大约200 MiB。对于千分之一的误报,为2GiB。
使用多个散列函数代替一个散列函数可以提高相同数量位的误报率。
以上是 需要高效的内存存储方式来存储大量字符串(是:Java中的HAT-Trie实现) 的全部内容, 来源链接: utcz.com/qa/425321.html