我看到Java中的HashSet在内部使用HashMap来检查HashSet是否包含元素。它不能仅使用位图来存储字符串中的所有哈希结果。例如。字符串abc散列为12索引,我们可以设置该索引以表明它存在。与HashMap相比,它将节省大量空间,因为我们不必在数据中存储实际密钥。
答案 0 :(得分:5)
如果HashSet仅用于contains()查找,则可能可以进行类似的优化。这仍然很危险,因为哈希冲突总是会发生。我认为您正在寻找的是Bloom Filter(请注意,Bloom Filter无法提供确切的答案,它只是排除了误报)。
哈希集是一个集合,并且一个集合需要有可能检索存储的值。散列不可逆,您无法根据其散列计算原始字符串。