4.5 Hashtable
Hashtable通常被称为哈希表,Hashtable与ArrayList一样也属于System.Collections命名空间,Hashtable中的每个元素都是一个存储在DictionaryEntry对象中的key/value对,其中key通常用来快速查找,同时key也可区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对。
Hashtable的构造方法有很多种,在此只介绍几种最常用的构造方法。
(1)使用默认的、不带参数的构造方法初始化Hashtable类的实例,这样使得初始容量、加载因子、哈希代码提供程序和比较器都是默认的,其语法如下:
public Hashtable()
(2)使用指定的初始容量、默认加载因子、默认哈希代码提供程序和摩恩比较器来初始化Hashtable类的实例,其语法如下:
public Hashtable(int capacity)
其中,capacity是Hashtable对象最初可包含的元素的近似数。
4.5.1 Hashtable的属性及其方法
Hashtable的属性及其方法如表4-2所示。
表4-2 Hashtable的属性及其方法
下面就Hashtable的操作,重点讲解下其相应方法的使用。
4.5.2 Hashtable元素的添加
向Hashtable中添加元素可以使用Hashtable类的Add方法,Add方法将带有指定键和值的元素添加到Hashtable中,其语法格式如下:
public virtual void Add ( Object key, Object value )
其中,key为要添加的元素的键,value为要添加的元素的值。
此处要注意的是,key不可以为null,value可以。
4.5.3 Hashtable元素的删除
Hashtable删除元素时可以使用Remove方法和Clear方法。下面分别对这两个方法进行讲解。
1.Remove方法
Remove方法用于从Hashtable中移除带有指定键的元素,其语法格式如下:
public virtual void Remove ( Object key )
2.Clear方法
Clear方法用于从Hashtable中移除所有元素,其语法格式如下:
public virtual void Clear ()
4.5.4 Hashtable元素的遍历
遍历Hashtable的方法与遍历数组以及ArrayList类似,都可使用foreach等语句。
之前介绍过,由于Hashtable中的每个元素都是一个DictionaryEntry类的对象,因此应使用DictionaryEntry类型来进行遍历。
4.5.5 Hashtable元素的查找
在Hashtable中查找元素,可使用Hashtable类提供的Contains方法、ContainsKey方法以及ContainsValue方法。下面分别对这三种方法进行讲解。
1.Contains方法
Contains方法用于确定Hashtable是否包含特定键,其语法格式如下:
public virtual bool Contains ( Object key )
其中,key为要在Hashtable中定位的键。
2.ContainsKey方法
ContainsKey方法用于确定Hashtable是否包含特定键,其语法格式如下:
public virtual void ContainsKey ( Object key )
其中,key为要在Hashtable中定位的键。
3.ContainsValue方法
ContainsValue方法用于确定Hashtable是否包含特定值,其语法格式如下:
public virtual void ContainsValue ( Object value )
其中,value为要在Hashtable中定位的值。该值可以为空引用。
下面的例子演示了对Hashtable的相关操作。
例4-7:Hashtable的相关操作(ConsoleHashtable)
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleHashtable { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("sichuan", "chengdu"); ht.Add("jiangsu", "nanjing"); ht.Add("anhui", "hefei"); ht.Add("hunan", "changsha"); ht.Add("shandong", "jinan"); Console.WriteLine("Hashtable初始元素为:"); foreach (DictionaryEntry de in ht) { Console.WriteLine("Key:{0}\t\tValue:{1}", de.Key, de. Value); } if (ht.ContainsKey("anhui")) { ht.Remove("anhui"); } Console.WriteLine("\nHashtable移除元素后的结果为:"); foreach (string str in ht.Keys) { Console.WriteLine("Key:{0}\t\tValue:{1}", str, ht[str]); } ht.Clear(); Console.WriteLine("\n已移除Hashtable中的所有元素!"); Console.ReadLine(); } } }
运行结果如图4-7所示。
图4-7 Hashtable的相关操作