【发布时间】:2019-08-07 00:22:05
【问题描述】:
我的用例是我正在寻找 Java 中的数据结构,它可以让我查看内部是否存在具有相同哈希码的对象(通过调用 contains()),但我永远不需要遍历元素或检索实际对象。 HashSet 很接近,但据我了解,它仍然包含对实际对象的引用,这会浪费内存,因为我永远不需要实际对象的内容。我能想到的最佳选择是仅存储哈希码的整数类型的 HashSet,但我想知道是否有一个内置的数据结构可以完成同样的事情(并且只接受一种类型而不是 HashSet类型 Integer 将接受任何对象的哈希码)。
【问题讨论】:
-
你的哈希函数完美吗?或者你可以有多个具有相同哈希值的对象?
-
哈希冲突怎么办?
-
HashSet将包含对您的对象的引用,而不是副本,因此不必担心空间问题。HashSet<Integer>可能会占用更多空间,因为它引用了整数。 -
我同意@Sweeper 的观点,除非你真的需要超级骗子优化。此外,您将哈希码存储为整数的第二个想法不会更有效,因为它会存储哈希+哈希的哈希。
-
@Sweeper HashSet 在内部使用 HashMap。内存空间是一样的。