C#中的HashTable与Dictionary小结

引言: 网上搜集了一些资料,针对C#中的HashTable用法进行总结,方便日后查阅。

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


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

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


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


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

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

1.Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。

2.Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.

3.哈希表的简单操作:

(1)在哈希表中添加一个keyvalue键值对:HashtableObject.Add(key,value);

(2)在哈希表中去除某个keyvalue键值对:HashtableObject.Remove(key);

(3)从哈希表中移除所有元素: HashtableObject.Clear();

(4)判断哈希表是否包含特定键keyHashtableObject.Contains(key);

下面控制台程序将包含以上所有操作:

using System;

usingSystem.Collections; file使用Hashtable时,必须引入这个命名空间

class hashtable

{

publicstatic void Main()

{

Hashtableht=new Hashtable(); file创建一个Hashtable实例

ht.Add(E,e);添加keyvalue键值对

ht.Add(A,a);

ht.Add(C,c);

ht.Add(B,b);string s=(string)ht[A];

if(ht.Contains(E))file判断哈希表是否包含特定键,其返回值为true或false

Console.WriteLine(theE keyexist);

ht.Remove(C);移除一个keyvalue键值对

Console.WriteLine(ht[A]);此处输出a

ht.Clear();移除所有元素

Console.WriteLine(ht[A]);file此处将不会有任何输出

}

}

4.遍历哈希表遍历哈希表需要用到DictionaryEntry Object,代码如下:

for(DictionaryEntryde in ht) ht为一个Hashtable实例

{

Console.WriteLine(de.Key);de.Key对应于keyvalue键值对key

Console.WriteLine(de.Value);de.Key对应于keyvalue键值对value

}

5.对哈希表进行排序对哈希表进行排序在这里的定义是对keyvalue键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:

ArrayListakeys=new ArrayList(ht.Keys); file别忘了导入System.Collections

akeys.Sort(); file按字母顺序进行排序

for(string skey inakeys)

{

Console.Write(skey+ );

Console.WriteLine(ht[skey]);排序后输出

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值