.哈希表简述(转载)
哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即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]); //排序后输出
}