views:

124

answers:

1

I was wondering whether the .Net HashSet<T> is based completely on hash codes or whether it uses equality as well?

I have a particular class that I may potentially instantiate millions of instances of and there is a reasonable chance that some hash codes will collide at that point.

I'm considering using HashSet's to store some instances of this class and am wondering if it's actually worth doing - if the uniqueness of an element is only determined on its hash code then that's of no use to me for real applications

MSDN documentation seems to be rather vague on this topic - any enlightenment would be appreciated

+8  A: 

No, it uses equality as well. By definition, hash codes don't need to be unique - anything which assumes they will be is broken. HashSet<T> is sensible. It uses an IEqualityComparer<T> (defaulting to EqualityComparer<T>.Default) to perform both hash code generation and equality tests.

Jon Skeet
Great - that's exactly what I hoped it did - MSDN just fails to make that clear in the documentation
RobV