.Net HashSet唯一性计算完全基于哈希码吗?

时间:2010-03-16 14:32:29

标签: c# .net hashset gethashcode

我想知道.Net HashSet<T>是否完全基于哈希码,还是它也使用了相等?

我有一个特定的类,我可能会实例化数百万个实例,并且有一些合理的可能性会导致某些哈希码在此时发生冲突。

我正在考虑使用HashSet来存储这个类的一些实例,并且想知道它是否真的值得做 - 如果元素的唯一性只是在其哈希码上确定那么那对我来说对于真正的应用程序没有用

MSDN文档在这个主题上似乎相当模糊 - 任何启示都会受到赞赏

1 个答案:

答案 0 :(得分:14)

不,它也使用平等。根据定义,哈希码不需要是唯一的 - 假定它们将被破坏的任何东西。 HashSet<T>是明智的。它使用IEqualityComparer<T>(默认为EqualityComparer<T>.Default)来执行哈希码生成和相等测试。