第二部分 类型与通用语言运行时2-----《Microsoft.NET框架程序设计》
来源:互联网 发布:matlab som聚类算法 编辑:程序博客网 时间:2024/05/02 00:51
一个类型必须同时重写Equals方法和GetHashCode方法是因为System.Collections.Hashtable类型的实现要求任何两个相等的对象都必须有相同的散列码值.所以如果我们重写了Equals方法,我们也应该重写GetHashCode方法以确保用来判等的算法和用来计算对象散列码的算法一致.
基本上来讲,当我们向一个Hashtable对象中添加一个"键/值对"时,其中"键对象"的散列码会首先被获取.该散列码指出了"键/值对"应该被存储在哪个"散列桶(Bucket)"中.当Hashtable对象需查找某个"键"时,它会取得指定"键对象"的散列码.然后在该散列码所标识的那个"散列桶"中进一步查找和指定的"键对象"相等的"键对象".使用这种存储和搜索"键"的算法意味着如果我们改变了Hashtable中的一个"键对象",我们在Hashtable中将不再找到该对象.
实现一个GetHashCode方法可以相当容易.但是,根据我们的数据类型的数据的分布,如果要得到一个数值范围分布良好的散列算法,还需要一些技巧.下面是一个简单的例子,对于Point对象来说可能已经足够了:
class Point {
Int32 x, y;
public override Int32 GetHashCode() {
return x^y; //对x和y做异或操作
}
}
当选择计算类型实例的散列码算法时,我们应该尽力遵循以下原则:
算法应该使所得的数值有一个良好的随机分布,这样散列表可以获得最佳的性能.
算法还可以调用基类型的GetHashCode方法,并将其返回值包含在我们自己的算法中。但一般情况下,我们不应该调用Object或者valueType的GetHashCode方法,因为这两个
- 第二部分 类型与通用语言运行时2-----《Microsoft.NET框架程序设计》
- 第二部分 类型与通用语言运行时----------------读《Microsoft.NET框架程序设计》
- 第二部分 类型与通用语言运行时----读《Microsoft.NET框架程序设计》
- 第三部分 类型设计2------《Microsoft.NET框架程序设计》
- 第五部分 基元类型、引用类型与值类型----读《Microsoft.NET框架程序设计》
- 第三部分 类型设计-----《Microsoft.NET框架程序设计》
- 第三部分 类型设计------《Microsoft.NET框架程序设计》
- 第4部分 类型设计-----《Microsoft.NET框架程序设计》
- Microsoft.NET.框架程序设计 值类型与引用类型
- 第4部分 事件2-----《Microsoft.NET框架程序设计》
- 第一部分 Microsoft.NET框架基本原理2----读《Microsoft.NET框架程序设计》
- 第一部分 CLS----读《Microsoft.NET框架程序设计》
- 第九部分 方法----读《Microsoft.NET框架程序设计》
- 第4部分 事件-----《Microsoft.NET框架程序设计》
- 第12章 枚举类型与位标记-----《Microsoft.NET框架程序设计》
- 第一部分 Microsoft.NET框架基本原理----读《Microsoft.NET框架程序设计》
- 第一部分 Microsoft.NET框架基本原理3----读《Microsoft.NET框架程序设计》
- 第一部分 Microsoft.NET框架基本原理4----读《Microsoft.NET框架程序设计》
- WindowsNT/200 环境下要自订纸张尺寸(自定义页面)
- 劳动合同注意事项
- Interview Questions for Software Testing Engineers
- 数据库缓存算法思想与实现
- 这是我的错吗/????
- 第二部分 类型与通用语言运行时2-----《Microsoft.NET框架程序设计》
- 我回来了,却有很多牢骚
- Java框架介绍:Quartz
- 裁剪后的进程列表
- 红色通缉令
- 不修改/etc/ld.so.conf使用非默认路径下的库文件--LD_LIBRARY_PATH
- db2服务端和客户端节点的配置
- LINUX动态链接库高级应用(etc/ld.so.conf)
- LINUX系统中动态链接库的创建与使用