猿教程 Logo

C# Hashtable

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效:去购买

说明

C#包括System.Collections命名空间中的Hashtable集合,类似于通用Dictionary集合。 Hashtable集合存储键值对。 它通过计算每个密钥的哈希码来优化查找,并在内部将它存储在不同的桶中,然后在访问值时匹配指定密钥的哈希码。


Hashtable的重要属性和方法

属性描述
Count获取Hashtable中键/值对的总数。
IsReadOnly获取指示Hashtable是否为只读的布尔值。
Item获取或设置与指定键关联的值。
Keys获取Hashtable中的键的ICollection。
Values获取Hashtable中的值的ICollection。


方法描述
Add将带有键和值的项目添加到散列表中。
Remove从散列表中删除带有指定键的项。
Clear从散列表中删除所有项目。
Contains检查散列表是否包含特定键。
ContainsKey检查散列表是否包含特定键。
ContainsValue检查散列表是否包含特定值。
GetHash返回指定键的哈希码。

向Hashtable添加键值对

Add()方法将一个带有键和值的项目添加到Hashtable中。 键和值可以是任何数据类型。 键不能为空,而值可以为null。

Add()签名:void Add(object key, object value);

相关实例:

Hashtable ht = new Hashtable();

ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add(5, null);
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);

您还可以在初始化时使用对象初始化语法分配键和值:

相关实例:

Hashtable ht = new Hashtable()
                {
                    { 1, "One" },
                    { 2, "Two" },
                    { 3, "Three" },
                    { 4, "Four" },
                    { 5, null },
                    { "Fv", "Five" },
                    { 8.5F, 8.5 }
                };

Hashtable可以包括Dictionary的所有元素,如下所示。

相关实例:

Dictionarydict = new Dictionary();

dict.Add(1, "one");
dict.Add(2, "two");
dict.Add(3, "three");

Hashtable ht = new Hashtable(dict);
重点
如果您尝试添加已经存在于Hashtable中的键,Add()将抛出异常。 因此,在将键值对添加到Hashtable之前,请始终使用Contains()或ContainsKey()方法检查键。

访问Hashtable

您可以使用索引器从哈希表检索现有键的值。 请注意,散列表索引器需要一个key。

相关实例:

Hashtable ht = new Hashtable();

ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5F);
    
string strValue1 = (string)ht[2];
string strValue2 = (string)ht["Fv"];
float fValue = (float) ht[8.5F];

Console.WriteLine(strValue1);
Console.WriteLine(strValue2);
Console.WriteLine(fValue);

运行结果:

Two 
Five 
8.5
重点
Hashtable是一个非泛型集合,因此它可以包含一个键和任何数据类型的值。 因此,必须将值转换为适当的数据类型,否则会给编译时错误。

Hashtable元素是存储在DictionaryEntry中的键值对。 所以你把Hashtable中的每个元素转换为DictionaryEntry。 使用foreach语句来迭代Hashtable,如下所示:

相关实例:

Hashtable ht = new Hashtable();

ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);

foreach (DictionaryEntry item in ht)
        Console.WriteLine("key:{0}, value:{1}",item.Key, item.Value);

运行结果:

Key: Fv, Value: Five 
Key: 8.5, Value: 8.5 
Key: 4, Value: Four 
Key: 3, Value: Three 
Key: 2, Value: Two 
Key: 1, Value: One

Hashtable有一个Keys和一个Values属性,分别包含所有的键和值。 您可以使用这些属性来获取键和值。

相关实例:

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);

foreach (var key in ht.Keys )
        Console.WriteLine("Key:{0}, Value:{1}",key , ht[key]);

Console.WriteLine("***All Values***");
        
foreach (var value in ht.Values)
        Console.WriteLine("Value:{0}", value);

运行结果:

Key: Fv, Value: Five 
Key: 8.5, Value: 8.5 
Key: 4, Value: Four 
Key: 3, Value: Three 
Key: 2, Value: Two 
Key: 1, Value: One
***All Values***
Value: Five 
Value: 8.5 
Value: Four 
Value: Three 
Value: Two 
Value: One

从Hashtable删除元素

Remove()方法从hashtable中删除带有指定键的项目。

Remove()方法签名:void Remove(object key)

相关实例:

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);

ht.Remove("Fv"); //123 removes {"Fv", "Five"}

检查元素是否存在

Contains()和ContainsKey()检查指定的键是否存在于Hashtable集合中。 ContainsValue()检查指定的值是否存在于Hashtable中。

Contains(),ContainsKey()和ContainsValue()签名:

bool Contains(object key)

bool ContainsKey(object key)

bool ContainsValue(object value)

相关实例:

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");

ht.Contains(2);// returns true
ht.ContainsKey(2);// returns true
ht.Contains(5); //returns false
ht.ContainsValue("One"); // returns true

Clear():

Clear()方法删除Hashtable中的所有键值对。

Clear()方法签名:void Clear()

相关实例:

Hashtable ht = new Hashtable();
ht.Add(1, "One");
ht.Add(2, "Two");
ht.Add(3, "Three");
ht.Add(4, "Four");
ht.Add("Fv", "Five");
ht.Add(8.5F, 8.5);

ht.Clear(); // removes all elements
Console.WriteLine("Total Elements: {0}", ht.Count);

运行结果:

Total Elements: 0

更多关于C# Hashtable的阅读资料:

Hashtable和Dictionary之间的区别

Hashtable类成员

重点
  1. Hashtable存储任何数据类型的键值对,其中键必须是唯一的。

  2. Hashtable键不能为null,而值可以为null。

  3. Hashtable通过比较键的哈希码来检索项目。 所以它的性能比Dictionary集合慢。

  4. Hashtable使用默认的hashcode提供者是object.GetHashCode()。 您还可以使用自定义哈希码提供程序。

  5. 使用DictionaryEntry和foreach语句来迭代Hashtable。

阿里云服务器,每月低至7.8元,项目演示即建站必备,比腾讯云更便宜,并且不需学生认证,从此链接购买有效: 去购买


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/CSharp/Csharp-hashtable.html