C#中的Hashtable(哈希表)详解
目录
一、Hashtable(哈希表)
二、常用的Hashtable的构造函数
1、使用默认的初始容量
2、使用指定的初始容量
三、Hashtable常用属性
四、Hashtable元素的添加
五、Hashtable元素的删除
1、Clear()方法
2、Remove()方法
六、Hashtable的遍历
七、Hashtable元素的查找
1、Contains()方法
2、ContainsKey()方法
3、ContainsValue()方法
一、Hashtable(哈希表)
Hashtable(哈希表)是一种重要的集合类型。
Hashtable通常称为哈希表,它表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。它的每个元素都是一个存储在DictionaryEntry对象中的键/值对。键不能为空引用,但值可以。
二、常用的Hashtable的构造函数
1、使用默认的初始容量
使用默认的初始容量、加载因子、哈希代码提供程序和比较器来初始化Hashtable类的新的空实例,语法如下:
public Hashtable();
2、使用指定的初始容量
使用指定的初始容量、默认加载因子、默认哈希代码提供程序和默认比较器来初始化Hashtable类的新的空实例,语法如下:
public Hashtable(int capacity) capacity:Hashtable对象最初可包含的元素的近似数目。
三、Hashtable常用属性
属性 | 说明 |
Count | 获取包含在Hashtable中键值对的数目 |
IsFixedSize | 获取一个值,该值指示Hashtable中是否具有固定的大小 |
IsReadOnly | 获取一个值,该值指示Hashtable是否为只读 |
IsSyncronized | 获取一个值,该值指示是否同步对Hashtable的访问 |
Item | 获取或设置与指定键相关联的值 |
Keys | 获取包含在Hashtable中键的ICollection |
SyncRoot | 获取可用于同步Hashtable访问的对象 |
Values | 获取包含在Hashtable中值的ICollection |
四、Hashtable元素的添加
向Hashtable中添加元素时,可以使用Hashtable类提供的Add()方法。
Add()方法用来将带有指定键和值的元素添加到Hashtable中,其语法格式:
public virtual void Add(Object key,Object value) ☑ key:要添加的元素的键。 ☑ value:要添加的元素的值,该值可以为空引用。
如果指定了Hashtable的初始容量,则不用限定向Hashtable对象中添加的因子个数。容量会根据加载的因子自动增加。
//hashtable() //hashtable()属性、使用Add()方法为该Hashtable对象添加元素 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Test7_15 { class Program { static void Main(string[] args) { if (args is null) //解除IDE0060 { throw new ArgumentNullException(nameof(args)); } Hashtable hashtable = new() //实例化Hashtable对象并添加元素 { { "id", "BH0001" }, //以类似数组的方法添加元素,适合初始化和批量赋值 { "name", "TM" }, { "sex", "男" } }; Console.WriteLine(hashtable.Count); //获得Hashtable哈希表中的元素个数属性 hashtable.Add("TEL","6657"); //也可以hashtable.Add();方法添加元素 Console.WriteLine(hashtable.Count); Console.Read(); } } } /*运行结果: 3 4 */
五、Hashtable元素的删除
在Hashtable中删除元素时,可以使用Hashtable类提供的Clear()方法和Remove()方法。下面对这两个方法进行详细介绍。
1、Clear()方法
Clear()方法用来从Hashtable中移除所有元素,其语法格式:
public virtual void Clear()
//hashtable() //使用Clear()方法移除Hashtable中的所有元素 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Test7_16 { class Program { static void Main(string[] args) { if (args is null) //解除IDE0060 { throw new ArgumentNullException(nameof(args)); } Hashtable hashtable = new() //实例化Hashtable对象并初始化赋值 { { "id", "BH0001" }, //以类似数组添加元素的方法批量向Hashtable哈希表中添加元素 { "name", "TM" }, { "sex", "男" } }; hashtable.Clear(); //移除Hashtable哈希表中的元素 Console.WriteLine(hashtable.Count); hashtable.Add("TEL","6657"); Console.WriteLine(hashtable.Count); Console.Read(); } } } /*运行结果: 0 1 */
2、Remove()方法
Remove()方法用来从Hashtable中移除带有指定键的元素,其语法格式:
public virtual void Remove(Object key) key:要移除的元素的键。
//hashtable() //使用Remove()方法移除Hashtable中键=sex的元素 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Test7_17 { class Program { static void Main(string[] args) { if (args is null) //解除IDE0060 { throw new ArgumentNullException(nameof(args)); } Hashtable hashtable = new() //实例化Hashtable对象并初始化赋值 { { "id", "BH0001" }, //向Hashtable哈希表中添加元素 { "name", "TM" }, { "sex", "男" } }; hashtable.Remove("sex"); //移除Hashtable哈希表中的指定键=sex的所有元素 Console.WriteLine(hashtable.Count); Console.Read(); } } } /*运行结果: 2 */
六、Hashtable的遍历
Hashtable的遍历与数组类似,都可以使用foreach语句。这里需要注意的是,由于Hashtable中的元素是一个键/值对,因此需要使用DictionaryEntry结构来进行遍历。DictionaryEntry结构表示一个键/值对的集合。
//Hashtable() //Hashtable的遍历与数组类似,都可以使用foreach语句,使用DictionaryEntry结构来进行遍历 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Test7_18 { class Program { static void Main(string[] args) { if (args is null) //解除IDE0060 { throw new ArgumentNullException(nameof(args)); } Hashtable hashtable = new /*Hashtable*/() //实例化Hashtable对象 { { "id", "BH0001" }, //向Hashtable哈希表中添加元素 { "name", "TM" }, { "sex", "男" } }; Console.WriteLine("\t 键\t 值"); //格式化输出表头 foreach (DictionaryEntry dicEntry in hashtable) //遍历Hashtable哈希表中的元素并输出其键值对 { Console.WriteLine("\t " + dicEntry.Key + "\t " + dicEntry.Value); } Console.WriteLine(); Console.Read(); } } } /*运行结果: 键 值 id BH0001 name TM sex 男 */
七、Hashtable元素的查找
在Hashtable中查找元素时,可以使用Hashtable类提供的Contains()方法、ContainsKey()方法和 ContainsValue()方法。
1、Contains()方法
Contains()方法用来确定Hashtable中是否包含特定键,其语法格式:
public virtual bool Contains(Object key) ☑ key:要在Hashtable中定位的键。 ☑ 返回值:如果Hashtable包含具有指定键的元素,则为true;否则为false。
//Hashtable() //Contains()方法用来确定Hashtable中是否包含特定键 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Test7_19 { class Program { static void Main(string[] args) { if (args is null) //解除IDE0060 { throw new ArgumentNullException(nameof(args)); } Hashtable hashtable = new() //实例化Hashtable对象 { { "id", "BH0001" }, //向Hashtable哈希表中添加元素 { "name", "TM" }, { "sex", "男" } }; Console.WriteLine(hashtable.Contains("id"));//判断Hashtable哈希表中是否包含指定的键id Console.Read(); } } } /*运行结果: /*运行结果: True */
2、ContainsKey()方法
ContainsKey()方法和Contains()方法实现的功能、语法都相同。
3、ContainsValue()方法
ContainsValue()方法用来确定Hashtable中是否包含特定值,其语法格式
public virtual bool ContainsValue(Object key) ☑ value:要在Hashtable中定位的值,该值可以为空引用。 ☑ 返回值:如果Hashtable包含带有指定的value的元素,则为true;否则为false。
//Hashtable() //ContainsValue()判断Hashtable哈希表中是否包含指定的值 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace Test7_20 { class Program { static void Main(string[] args) { if (args is null) //解除IDE0060 { throw new ArgumentNullException(nameof(args)); } Hashtable hashtable = new /*Hashtable*/() //实例化Hashtable对象 { { "id", "BH0001" }, //向Hashtable哈希表中添加元素 { "name", "TM" }, { "sex", "男" } }; Console.WriteLine(hashtable.ContainsValue("男")); //判断Hashtable哈希表中是否包含指定的键值 Console.Read(); } } } /*运行结果: True */
还没有评论,来说两句吧...