我们要求在文件中读/写超过1000万个字符串.此外,我们不希望文件中有重复项.由于字符串在读取后会立即刷新到文件中,因此我们不会将其保留在内存中.
我们不能使用哈希码,因为哈希码中的冲突导致我们可能会错过字符串作为重复.
我在谷歌搜索中找到的另外两种方法:
1.使用消息摘要算法,如MD5 – 但计算和存储可能成本太高.
2.使用校验和算法. [我不确定这是否会产生一个字符串的唯一键 – 有人可以确认]
是否有任何其他方法可用.
谢谢.
解决方法
如果您对显微镜冲突的风险感到满意,可以按照建议使用一些哈希函数,例如MD5,并依赖哈希值.
另一种可能具有更大内存占用的替代方案是将已经遇到的字符串存储在trie(一种特殊类型的树)中.
更新:另一个替代方案是使用Bloom filter.然而,这仍然依赖于散列,但可以调整为具有任意小的碰撞概率.