转载至:Z&K的博客园
1 命名空间与继承关系
命名空间:System.Collections
继承关系:Object→Hashtable
表示根据键的哈希代码进行组织的键/值对的集合。
2 Hashtable(哈希表)简介
在 .NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.
3 Hashtable特点
(1)某些数据会被高频率查询
(2)数据量大
(3)查询字段包含字符串类型
(4)数据类型不唯一
4 Hashtable基本操作
Hashtable ht = new Hashtable();
序号 | 操作 | 说明 |
---|---|---|
1 | ht.Add(key,value) | 在ht中添加一个keyvalue键值对 |
2 | ht.Remove(key) | 在ht中去除某个keyvalue键值对 |
3 | ht.Clear(); | 移除ht所有元素 |
4 | ht.Contains(key) | 判断并返回(bool)哈希表是否包含特定键key |
5 | ht.ContainKey(key) | 判断并返回(bool)哈希表是否包含特定键key |
6 | ht.ContainValue(value) | 判断并返回(bool)哈希表是否包含特定值value |
7 | ht.Count | 返回元素个数(int)) |
例子:
static void Main(string[] args)
{
// 创建一个Hashtable实例
Hashtable ht = new Hashtable();
//添加两个键值对
ht.Add("1", "a");
ht.Add(2, "b");
//遍历输出元素
foreach (DictionaryEntry i in ht)
{
Console.WriteLine(i.Key + " " + i.Value);
}
//是否包含某个键或值
Console.WriteLine(ht.Contains(1));
Console.WriteLine(ht.ContainsKey(1));
Console.WriteLine(ht.ContainsValue("a"));
Console.WriteLine(ht.Count);
//删除元素
ht.Remove("1");
foreach (DictionaryEntry i in ht)
{
Console.WriteLine(i.Key + " " + i.Value);
}
//当前元素个数
Console.WriteLine(ht.Count);
//清除所有元素
ht.Clear();
foreach (DictionaryEntry i in ht)
{
Console.WriteLine(i.Key + " " + i.Value);
}
Console.WriteLine(ht.Count);
}
5 Hashtable的遍历
遍历分为:①Key遍历 ②value遍历 ③Key-value的遍历
示例如下:
static void Main(string[] args)
{
// 创建一个Hashtable实例
Hashtable ht = new Hashtable();
//添加两个键值对
ht.Add(1, "a");
ht.Add(2, "b");
ht.Add(3, "c");
ht.Add(4, "d");
//遍历key
Console.WriteLine("key的遍历");
foreach (int key in ht.Keys)
{
Console.WriteLine(key);
}
//遍历value
Console.WriteLine("value的遍历");
foreach (string value in ht.Values)
{
Console.WriteLine(value.ToString());
}
//遍历key-value
Console.WriteLine("key-value的遍历");
foreach (DictionaryEntry i in ht)
{
Console.WriteLine(i.Key + " " + i.Value);
}
}
6 使用多种数据类型的例子
static Hashtable GetHashtable()
{
Hashtable hashtable = new Hashtable();
hashtable.Add("名字", "小丽");
hashtable.Add("年龄", 22);
return hashtable;
}
static void Main()
{
Hashtable hashtable = GetHashtable();
//使用强制类型转换
string name = (string)hashtable["名字"];
Console.WriteLine(name);
int age = (int)hashtable["年龄"];
Console.WriteLine(age);
}
7 Hashtable的排序
对哈希表按key值重新排列的做法:
ArrayList akeys=new ArrayList(ht.Keys);
akeys.Sort(); //按字母顺序进行排序
foreach(string key in akeys)
{
Console.WriteLine(key + ": " + ht[key]); //排序后输出
}