C#GetHashCode()高性能散列算法

可能重复:
什么是重写的System.Object.GetHashCode的最佳算法?

我们知道,如果我们在自定义类型中重写ObjectEquals方法,我们还应该覆盖并提供GetHashCode方法的实现,以支持生成唯一的哈希代码以用于支持HashtableDictionary集合类,也可能是其他类。

这要求我们在被overriden内部使用的哈希算法的实现GetHashCode方法是最优和准确的,即它生成一个唯一的类型哈希,并尽可能快地提高性能,以提高使用我们类型的应用程序的性能。

我的问题是哈希算法GetHashCode实现中使用时是否准确并且性能最优? 或者,我们是否应该只使用基类型的GetHashCode实现? 我想知道这个value typesreference types答案..

编辑:下面是一个关于为什么我需要重写Equals的类的示例:

public class Laptop : LaptopBase
{
    public readonly string Make;
    public readonly string ProcessorArch;
    public readonly int MemorySupported;
    public readonly int HardDiskGBSupported;
    public readonly Color ColorName;

    public Laptop(make, procArch, memorySupp, hdGB, color)
    {
        Make = make;
        ProcessorArch = procArch;
        MemorySupported = memorySupp;
        HardDiskGBSupported = hdGB;
        ColorName = color;
    }
}

现在,我想为2个Laptop实例返回true,这两个实例的所有上面定义的字段都相互匹配,因此需要重写EqualsGetHashCode方法,另外一个需求是,您可以看到这是一个派生类,可能是进一步重用并支持一些方法; 因此,不能成为值类型(结构)。 我尝试过使用所有匹配实例字段的上述类型的2个实例,如果我使用Equals的基本实现 - 它将返回false ,我希望它是true如何支持这种情况?


它取决于它实现的类型,但它应该给出值的良好分散,并且它不是GetHashCode()返回唯一值的必须条件。 它应该基于Equals实现中使用的那些字段,并且这些字段应该是不可变的。 因此对于结构和类,Equals / GetHashCode的要求是相同的。

正如Henk所说,最好不要覆盖Equals / GetHashCode ......

链接地址: http://www.djcxy.com/p/39761.html

上一篇: C# GetHashCode() High Performance Hashing Algorithm

下一篇: How do you implement GetHashCode() on objects?