Is the .Net HashSet uniqueness calculation completely based on Hash Codes?
Asked Answered
C

1

13

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

Communism answered 16/3, 2010 at 14:32 Comment(0)
S
14

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.

Spracklen answered 16/3, 2010 at 14:34 Comment(1)
Great - that's exactly what I hoped it did - MSDN just fails to make that clear in the documentationCommunism

© 2022 - 2024 — McMap. All rights reserved.