1.哈希表简述
哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。哈希表也有一些缺点它是基于数组的,数组创建后难于扩展某些哈希表被基本填满时,性能下降得非常严重,所以程序虽必须要清楚表中将要存储多少数据(或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程。
在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.
2.哈希表用法
1)命名空间
using System.Collections; using System.Collections.Generic;
2)基本操作
//添加一个keyvalue键值对: HashtableObject.Add(key,value); //移除某个keyvalue键值对: HashtableObject.Remove(key); //移除所有元素: HashtableObject.Clear(); // 判断是否包含特定键key: HashtableObject.Contains(key);
3)例子
Hashtable ht = new Hashtable(); ht.Add("1706010315", "小张"); ht.Add("1706010316", "小王"); ht.Add("1706010317", "小李"); ht.Add("1706010318", "小红"); string mate = (string)ht["1706010315"]; //根据键值取元素 bool exist = ht.Contains("1706010316"); //哈希表中是否含有特定键 ht.Remove("1706010315"); //移除一个 ht.Clear(); //移除全部
4)类型转换
ht.Add("1806010712", "小强"); //能转换成功 string value = ht["1806010712"] as string; if (value != null) { Console.WriteLine(value); } //不能转换成功 获取的值变为null StreamReader reader = ht["1806010712"] as StreamReader; if (reader == null) { Console.WriteLine("小强不是streamread型"); } //先获取object型 再做判断 Object value2 = ht["1806010712"]; if(value2 is string) { Console.WriteLine("这个是字符串型"); }
5)遍历
//遍历哈希表 foreach(DictionaryEntry de in ht) { Console.WriteLine(de.Key); Console.WriteLine(de.Value); } //遍历键 foreach(string key in ht.Keys) { Console.WriteLine(key); } //遍历值 foreach(string value3 in ht.Values) { Console.WriteLine(value3); }
6)排序
ArrayList akeys=new ArrayList(ht.Keys); akeys.Sort(); //按字母顺序进行排序 foreach(string key in akeys) { Console.WriteLine(key + ": " + ht[key]); //排序后输出 }