Hashtable集合类由包含集合元素的存储桶组成。 存储桶是 Hashtable 中元素的虚拟子组,与在大多数集合中进行搜索和检索相比,其搜索和检索更加容易和快速。当将对象添加到 Hashtable时,先用hash函数根据自身的key值生成一个特定的哈希码,并把它存储在与该哈希码相关联的存储桶中。当在 Hashtable 中对一个值进行搜索时,先为该值生成哈希码,并搜索与该哈希代码相关联的存储桶。
哈希函数是一种算法,它基于键值来生成并返回一个哈希码。你还可以重写此哈希函数,如果你喜欢的话。方法是实现 IHashCodeProvider接口中的 Hashtable 构造函数。在 Hashtable 中的每个对象能够通过使用 GetHashCode 方法得到自身的哈希码。另外,哈希函数有可能为两个不同的键生成相同的哈希代码。
例如,用于字符串的哈希函数可能采用字符串中每个字符的 ASCII 代码,并将它们加总以生成哈希代码。 字符串“picnic”的哈希代码可能与字符串“basket”的哈希代码不同;因此,字符串“picnic”和“basket”可能在不同的存储桶中。 与此相反,“stressed”和“desserts”可能具有相同的哈希代码,并且位于同一个存储桶中。
Hashtable t = new Hashtable();
t.Add("a","90");
t.Add("b", "70");
t.Add("c", "60");
Console.WriteLine("打印键");
foreach(string s in t.Keys)
{
Console.WriteLine(s);
}
Console.WriteLine("打印值");
foreach (string s in t.Values)
{
Console.WriteLine(s);
}
Console.WriteLine("打印键值对");
foreach (DictionaryEntry de in t)
{
Console.WriteLine("{0},{1}", de.Key, de.Value);
Console.WriteLine("哈希码{0};",de.GetHashCode());
// Console.WriteLine(de.Key, de.Value);这是错误的写法
}
//foreach 语句是对枚举数的包装,它只允许从集合中读取,不允许写入集合。
Console.WriteLine("获取键值对的对数");
Console.WriteLine(t.Count);
Console.WriteLine("删除指定key的键值对");
t.Remove("a");
foreach (DictionaryEntry de in t)
{
Console.WriteLine("{0},{1}", de.Key, de.Value);
// Console.WriteLine(de.Key, de.Value);这是错误的写法
}
t.Clear();//删除t中所有的键值对