Is the .Net HashSet uniqueness calculation complet

2020-08-14 02:52发布

问题:

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

回答1:

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.