了解C# Hashtable

开发 后端
本文介绍在C# Hashtable 中用作元素的每一对象必须能够使用 GetHashCode 方法的实现为其自身生成哈希代码。

要了解C# Hashtable的使用,我们先来看一个例子!

  1. usingSystem;  
  2. usingSystem.Collections;  
  3.  
  4. namespaceNoSortHashtable  
  5. {  
  6. ///<summary> 
  7. ///SummarydescriptionforClass1.  
  8. ///</summary> 
  9. classClass1  
  10. {  
  11. ///<summary> 
  12. ///Themainentrypointfortheapplication.  
  13. ///</summary> 
  14. [STAThread]  
  15. staticvoidMain(string[]args)  
  16. {  
  17. HashtablehashTable=newHashtable();  
  18.  
  19. hashTable.Add(\"hunan\",\"changsha\");  
  20. hashTable.Add(\"beijing\",\"beijing\");  
  21. hashTable.Add(\"anhui\",\"hefei\");  
  22. hashTable.Add(\"sichuan\",\"chengdu\");  
  23. foreach(stringstrinhashTable.Keys)  
  24. {  
  25. Console.WriteLine(str+\":\"+hashTable[str]);  
  26. }  
  27.  
  28. }  
  29. }  

Hashtable 对象由包含集合元素的存储桶组成。存储桶是 Hashtable 中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。每一存储桶都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。

哈希函数是基于键返回数值哈希代码的算法。键是正被存储的对象的某一属性的值。哈希函数必须始终为相同的键返回相同的哈希代码。一个哈希函数能够为两个不同的键生成相同的哈希代码,但从哈希表检索元素时,为每一唯一键生成唯一哈希代码的哈希函数将令性能更佳。

在C# Hashtable 中用作元素的每一对象必须能够使用 GetHashCode 方法的实现为其自身生成哈希代码。但是,还可以通过使用接受 IHashCodeProvider 实现作为参数之一的 Hashtable 构造函数,为 Hashtable 中的所有元素指定一个哈希函数。

在将一个对象添加到 Hashtable 时,它被存储在存储桶中,该存储桶与匹配该对象的哈希代码的哈希代码关联。在 Hashtable 内搜索一个值时,将为该值生成哈希代码,并且搜索与该哈希代码关联的存储桶。

例如,一个字符串的哈希函数可以采用该字符串中每一字符的 ASCII 代码并它们添加到一起来生成一个哈希代码。字符串“picnic”将具有与字符串“basket”的哈希代码不同的哈希代码;因此,字符串 “picnic”和“basket”将处于不同的存储桶中。与之相比,“stressed”和“desserts”将具有相同的哈希代码并将处于相同的存储桶中。

Dictionary 类与 Hashtable 类的功能相同。对于值类型,特定类型(不包括 Object)的 Dictionary 的性能优于 Hashtable,这是因为 C# Hashtable 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和取消装箱操作

【编辑推荐】

  1. 概述C#实现文件下载
  2. C#搞定网站验证码的方法
  3. 浅谈C# String对象
  4. C#命名空间学习笔记
  5. 浅析C#调用ActiveX控件
责任编辑:佚名 来源: zol
相关推荐

2009-08-26 10:34:59

C# Hashtabl

2009-06-24 09:52:21

哈希表

2021-07-27 06:49:11

C#存储检索

2023-09-26 07:38:53

c#Lambda表达式

2021-04-15 05:53:35

C# 索引器对象

2024-08-22 08:17:55

C#工具循环

2009-08-25 17:15:50

C#隐藏C#重写C#重载

2009-09-02 17:10:45

C#语言入门

2009-08-25 17:21:31

C#索引

2024-09-18 05:20:00

C#代码

2009-08-27 16:11:03

C# delegateC# event

2009-08-25 17:59:49

C#入门

2009-08-13 17:04:09

C#语言C#程序

2022-01-15 10:02:03

Java Hashtable类 Java 基础

2009-08-26 10:34:15

C#类型C#变量

2009-08-24 11:02:52

C#接口映射

2009-08-18 10:30:30

C#枚举

2009-08-19 16:50:32

Visual C#C#语言特性

2009-08-24 09:55:26

C#接口转换

2016-10-13 13:33:41

反射特性c#
点赞
收藏

51CTO技术栈公众号