我想知道.NetHashSet<T>
是否完全基于哈希码,或者它是否也使用相等?
我有一个特定的类,我可能会实例化数百万个实例,并且有合理的机会在那时一些哈希码会发生冲突。
我正在考虑使用 HashSet 来存储这个类的一些实例,并且想知道它是否真的值得做——如果一个元素的唯一性只取决于它的哈希码,那么这对我来说对真正的应用程序没有用
MSDN 文档在这个主题上似乎相当模糊 - 任何启示将不胜感激
我想知道.NetHashSet<T>
是否完全基于哈希码,或者它是否也使用相等?
我有一个特定的类,我可能会实例化数百万个实例,并且有合理的机会在那时一些哈希码会发生冲突。
我正在考虑使用 HashSet 来存储这个类的一些实例,并且想知道它是否真的值得做——如果一个元素的唯一性只取决于它的哈希码,那么这对我来说对真正的应用程序没有用
MSDN 文档在这个主题上似乎相当模糊 - 任何启示将不胜感激
不,它也使用平等。根据定义,哈希码不需要是唯一的 - 任何假设它们会被破坏的东西。HashSet<T>
是明智的。它使用IEqualityComparer<T>
(默认为EqualityComparer<T>.Default
)来执行哈希码生成和相等测试。