• 对象哈希码


    1,为什么要定义GetHashCode方法

    类型定义Equals之所以还要定义GetHashCode,是由于在Hashtable和Dictionary类型以及其他一些集合的实现中,要求对象必须具有相同哈希码才被视为相等。所以,重写Equals就必须重写GetHashCode方法,确保相等性算法和对象哈希码算法一致

    2,选择算法来计算类型实例的哈希码时,请遵循以下规则

    ①这个算法要提供良好的随即分布,使哈希表获得最佳性能

    ②可在算法中调用基类的GetHashCode方法,并包含它的返回值。但一般不要调用Object或ValueType的GetHashCode方法,因为两者的实现都与高性能哈希算法“不沾边”
    ③算法至少使用一个实例字段
    ④理想情况下,算法使用的字段应该不可变;也就是说,字段应在对象构造时初始化,在对象生存期“永不言变”
    ⑤算法执行速度尽量快
    ⑥包含相同值得不同对象应返回相同的哈希码。例如,包含相同文本的两个String对象应该返回相同的哈希码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication3
    {
    
        public class A
        {
            private int aaa;
    
            public A(int aaaa)
            {
                aaa = aaaa;
            }
    
            public string a { get; set; }
            public override bool Equals(object obj)
            {
                return obj.GetType()==GetType();
            }
    
            public override int GetHashCode()
            {
                return aaa;
            }
        }
    
    
        class Program
        {
            static void Main(string[] args)
            {
                var aa = new A(1) {a = "2"};
                var aa1 = new A(1) {a = "3"};
    
                Dictionary<A, string> s = new Dictionary<A, string>();
                s.Add(aa, "2");
    
                Console.WriteLine(aa.GetHashCode());
                Console.WriteLine(aa1.GetHashCode());
    
                //使用不同对象相同hash码能找到字典中的对象
                Console.WriteLine(s[aa1]);
    
                foreach (var VARIABLE in s)
                {
                    
                    //Console.WriteLine(VARIABLE.Value);
                }
    
                Console.ReadKey();
            }
        }
    }
    学习永不止境,技术成就梦想。
  • 相关阅读:
    2017-2018-1 20155218 《信息安全系统设计基础》第十一周学习总结
    # 课堂测试(CH6)20155218
    Elasticsearch6.0 IKAnalysis分词使用
    ELK6.0环境搭建及配置
    使用PHP抓取网站ico图标
    centos下apache+mysql+php安装及配置
    PHP的(Thread Safe与Non Thread Safe)
    作业九
    附加题
    作业八
  • 原文地址:https://www.cnblogs.com/zd1994/p/6523144.html
Copyright © 2020-2023  润新知