为什么HashSet不能仅在内部使用位数组而不是HashMap来节省一些空间?

时间:2019-05-28 20:19:35

标签: java hashmap hashset

我看到Java中的HashSet在内部使用HashMap来检查HashSet是否包含元素。它不能仅使用位图来存储字符串中的所有哈希结果。例如。字符串abc散列为12索引,我们可以设置该索引以表明它存在。与HashMap相比,它将节省大量空间,因为我们不必在数据中存储实际密钥。

1 个答案:

答案 0 :(得分:5)

如果HashSet仅用于contains()查找,则可能可以进行类似的优化。这仍然很危险,因为哈希冲突总是会发生。我认为您正在寻找的是Bloom Filter(请注意,Bloom Filter无法提供确切的答案,它只是排除了误报)。

哈希集是一个集合,并且一个集合需要有可能检索存储的值。散列不可逆,您无法根据其散列计算原始字符串。