您的位置: 网站首页 > 程序开发 > C#程序设计 > 第5章 集合 > 【5.5 Hashtable类和SortedList类】

5.5 Hashtable类和SortedList类

 

5.5  Hashtable类和SortedList

Hashtable类和SortedList类是两类略微复杂一些的集合,通常用于一些特殊的场合。本节对Hashtable类和SortedList类分别进行简单的介绍。

5.5.1  构造普通哈希表

HashTable通常被称为哈希表,它表示键(key/值(value)对的集合。这些键/值对根据键的哈希代码进行组织。它的每个元素都是一个存储在字典实体对象中的键/值对。键不能为空引用,但值可以,即HashTable像一个字典,根据键可以查找到相应的值。同大部分集合类一样,哈希表也提供了两类构造函数。下面通过一个实例演示这两种构造函数的创建方法。

1.目的说明

创建一个Windows控制台应用程序,演示如何创建哈希表。

2.实现步骤

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);

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-17所示。

5-17  运行结果

4.代码分析

可以看到,无论是否指定初始容量,创建的哈希表中元素个数都为0

5.5.2  哈希表操作

哈希表拥有普通集合常见的操作,包括元素的添加,访问等。下面介绍一个实例,演示哈希表在这方面的操作方法。

1.目的说明

创建一个Windows控制台应用程序,演示如何操作哈希表中的元素。

2.实现步骤

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);

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-18所示。

5-18  运行结果

4.代码分析

通过上述实例介绍了哈希表的大部分常见操作,如元素的添加、元素的删除以及元素的访问和元素的个数等。

5.5.3  排序哈希表SortedList

SortedList是一种较为复杂的集合类型,SortedList表示键/值对的集合,这些键/值对按键排序并可按照键和索引访问。

读者可以综合HashTableArrayList两者的不同点来理解SortedListSortedList的元素是键/值对,这点与HashTable相似。而其提供了索引的方法,这点又与ArrayList类似。因此,SortedList具有两者的优点,但同时也使效率下降。排序哈希表的创建方式与之前介绍的集合相同,这里只给出一段代码:

SortedList a = new SortedList();

SortedList b = new SortedList(5);

5.5.4  排序哈希表操作

本小节通过一个综合的实例介绍排序哈希表的操作。具体内容包括排序哈希表的创建、元素的添加、元素的访问、排序哈希表的遍历、元素的删除等。下面通过一个实例来说明。

1.目的说明

创建一个Windows控制台应用程序,演示如何操作排序哈希表。

2.实现步骤

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));

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图5-19所示。

5-19  运行结果

4.代码分析

从上述实例中可以看到排序哈希表的大部分常见操作,排序哈希表的创建、元素的添加、元素的访问、排序哈希表的遍历、元素的删除等。