它使用一个IEqualityComparer<T>
(EqualityComparer<T>.Default
除非您在构造上指定了另一个)。
将元素添加到集合中时,它将使用来查找哈希码IEqualityComparer<T>.GetHashCode
,并存储哈希码和元素(当然,在检查元素是否已在集合中之后)。
要查找一个元素,它将首先使用IEqualityComparer<T>.GetHashCode
来查找哈希码,然后对于具有相同哈希码的所有元素,它将IEqualityComparer<T>.Equals
用于比较实际相等性。
这意味着您有两个选择:
请注意,从 顺序 比较的角度来看,这些都不是什么-这很有意义,因为在某些情况下,您可以轻松指定相等性但不能指定总顺序。Dictionary<TKey, TValue>
基本上与都一样。
如果要使用 排序 而不是相等比较的集合,则应SortedSet<T>
从.NET 4 使用- 允许您指定一个IComparer<T>
而不是一个IEqualityComparer<T>
。这将使用IComparer<T>.Compare
-将委派给,IComparable<T>.CompareTo
或者IComparable.CompareTo
如果您正在使用Comparer<T>.Default
。