.net – 为什么我们需要IEqualityComparer,IEqualityComparer接口?

‘Equal’和’GetHashcode’方法存在于对象类中,我们的类型继承了对象基类.
直接实现对象的两个方法和使用IComparer接口有什么不同?

如果我们重写对象的Equal和GetHashCode,并推送到哈希表,它将使用overring的相等方法

什么是新的哈希表与IEqualityComparer构造函数的不同之处?

解决方法

当你需要能够“排序”对象时使用IComparable接口,它为你提供了一个方法(Compareto),它告诉你两个对象是否是<,=或> .使用IEqualityComparer的构造函数允许您提供特定的Equals / GetHashCode,它可以与您的对象定义的不同.通常,Hashtable将使用您的对象重写Equals和GetHashCode(或基础对象Equals和GetHashCode).

举个例子,标准字符串以区分大小写的方式(“A”!=“a”)进行比较,但是你可以使IEqualityComparer助手类能够以不区分大小写的方式对字符串进行散列. (从技术上讲,这个类已经存在多种变体:它们被称为StringComparer.InvariantCultureIgnoreCase和StringComparer的所有其他静态方法,它们返回一个实现IComparer的StringComparer对象,IEqualityComparer,IComparer< string>,IEqualityComparer< string>)

作为注释,Hashtable使用IEqualityComparer可选参数,而不是通用版本IEqualityComparer< T>,因为Hashtable是预先泛型.

相关文章

应用场景 C端用户提交工单、工单创建完成之后、会发布一条工...
线程类,设置有一个公共资源 package cn.org.chris.concurre...
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量