Hashtable类和SortedList类是两类略微复杂一些的集合,通常用于一些特殊的场合。本节对Hashtable类和SortedList类分别进行简单的介绍。
HashTable通常被称为哈希表,它表示键(key)/值(value)对的集合。这些键/值对根据键的哈希代码进行组织。它的每个元素都是一个存储在字典实体对象中的键/值对。键不能为空引用,但值可以,即HashTable像一个字典,根据键可以查找到相应的值。同大部分集合类一样,哈希表也提供了两类构造函数。下面通过一个实例演示这两种构造函数的创建方法。
创建一个Windows控制台应用程序,演示如何创建哈希表。
(1)创建一个名为HTCreate的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
Hashtable a = new Hashtable();
Console.WriteLine(a.Count);
Hashtable b = new Hashtable(5);
Console.WriteLine(b.Count);
}
按Ctrl+F5组合键运行程序,运行结果如图5-17所示。
图5-17 运行结果
可以看到,无论是否指定初始容量,创建的哈希表中元素个数都为0。
哈希表拥有普通集合常见的操作,包括元素的添加,访问等。下面介绍一个实例,演示哈希表在这方面的操作方法。
创建一个Windows控制台应用程序,演示如何操作哈希表中的元素。
(1)创建一个名为HTOperate的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
Hashtable a = new Hashtable();
a.Add(1, "A");
a.Add(2, "B");
a.Add(3, "C");
a.Add(4, "D");
a.Add(5, "E");
for (int i = 0; i < a.Count; i++)
{
Console.WriteLine(a[i+1]);
}
Console.WriteLine("元素个数:");
Console.WriteLine(a.Count);
a.Remove(2);
a.Remove(4);
Console.WriteLine("元素个数:");
Console.WriteLine(a.Count);
a[1] = "AA";
a[3] = "CC";
a[5] = "EE";
for (int i = 0; i < a.Count; i++)
{
Console.WriteLine(a[2*i+1]);
}
Console.WriteLine("元素个数:");
Console.WriteLine(a.Count);
}
按Ctrl+F5组合键运行程序,运行结果如图5-18所示。
图5-18 运行结果
通过上述实例介绍了哈希表的大部分常见操作,如元素的添加、元素的删除以及元素的访问和元素的个数等。
SortedList是一种较为复杂的集合类型,SortedList表示键/值对的集合,这些键/值对按键排序并可按照键和索引访问。
读者可以综合HashTable和ArrayList两者的不同点来理解SortedList。SortedList的元素是键/值对,这点与HashTable相似。而其提供了索引的方法,这点又与ArrayList类似。因此,SortedList具有两者的优点,但同时也使效率下降。排序哈希表的创建方式与之前介绍的集合相同,这里只给出一段代码:
SortedList a = new SortedList();
SortedList b = new SortedList(5);
本小节通过一个综合的实例介绍排序哈希表的操作。具体内容包括排序哈希表的创建、元素的添加、元素的访问、排序哈希表的遍历、元素的删除等。下面通过一个实例来说明。
创建一个Windows控制台应用程序,演示如何操作排序哈希表。
(1)创建一个名为SListOperate的控制台应用程序项目。
(2)修改Program.cs文件中Main方法的内容如下:
static void Main(string[] args)
{
//定义SortedList对象,并初始化
SortedList a;
a = new SortedList();
//定义SortedList对象,并初始化
SortedList b;
b = new SortedList(5);
//为mySortedList1中添加元素
a.Add(1, "a");
a.Add(2, "b");
a.Add(3, "c");
a.Add(4, "d");
a.Add(5, "e");
//为mySortedList2中添加元素
b.Add(1, "a");
b.Add(2, "b");
b.Add(3, "c");
b.Add(4, "d");
b.Add(5, "e");
//输出a的容量及元素个数
Console.WriteLine("a的容量为:{0}", a.Capacity);
Console.WriteLine("a的元素个数为:{0}", a.Count);
//输出b的容量及元素个数
Console.WriteLine("b的容量为:{0}", b.Capacity);
Console.WriteLine("b的元素个数为:{0}", b.Count);
//移除元素
a.Remove(1);
Console.WriteLine("a的容量为:{0}", a.Capacity);
Console.WriteLine("a的元素个数为:{0}", a.Count);
//查找元素
Console.WriteLine("a是否包含键2:{0}", a.ContainsKey(2));
Console.WriteLine("a是否包含值c:{0}", a.ContainsValue("c"));
//清空元素
a.Clear();
Console.WriteLine("a的容量为:{0}", a.Capacity);
Console.WriteLine("a的元素个数为:{0}", a.Count);
//遍历1
Console.WriteLine("遍历1:");
foreach (DictionaryEntry d in b)
{
Console.Write(d.Key);
Console.Write("\t");
Console.WriteLine(d.Value);
}
//遍历2
Console.WriteLine("遍历2:");
for (int i = 0; i < b.Count; i++)
{
Console.Write(b.GetKey(i));
Console.Write("\t");
Console.WriteLine(b.GetByIndex(i));
}
}
按Ctrl+F5组合键运行程序,运行结果如图5-19所示。
图5-19 运行结果