博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
对象哈希码
阅读量:5051 次
发布时间:2019-06-12

本文共 1580 字,大约阅读时间需要 5 分钟。

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
s = new Dictionary
(); 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(); } }}

 

转载于:https://www.cnblogs.com/zd1994/p/6523144.html

你可能感兴趣的文章
银行卡输入特效 4个加一空格
查看>>
zip unzip linux下使用
查看>>
每日英语:Instant Gratification: China Luxury Buyers Getting More Impulsive
查看>>
Java数据库操作学习
查看>>
使用更改跟踪(ChangeTracking)来实现数据类型变更
查看>>
c++访问mysql数据库
查看>>
JAVA代码查错试题集
查看>>
C#中小数点后保留两位小数,四舍五入的函数及使用方法
查看>>
你的JavaBean是否真的需要实现Serializable
查看>>
CSS3效果:立体字和镂空字
查看>>
规范 : angular 组合 jquery plugin
查看>>
文字无缝向上滚动
查看>>
IE6,谢谢你,goodbye?
查看>>
mongoDB 索引的用法
查看>>
Linux +apache+fastcgi运行c/c++
查看>>
atitit。 hb Hibernate sql 查询使用
查看>>
相关Python分割操作
查看>>
Mac > 编写跨平台桌面应用开发工具,基于 Web 技术
查看>>
《人月神话》3
查看>>
拼接sql语句时拼接空字符串报sql错误
查看>>