目录
Hashtable 类
https://docs.microsoft.com/zh-cn/dotnet/api/system.collections.hashtable?view=netcore-3.1
Hashtable类是一种键值对的集合,在内部,Hashtable类维护着一个哈希表。内部哈希表为插入到Hashtable的每个键进行哈希编码,在后续的检索操作中,通过哈希编码可以遍历所有元素。这种方法为搜寻操作提供了较佳的性能。
在.NET中,Hashtable类中存储的每个元素都是一个存储在DictionaryEntry对象中的键/值对。键不能为空引用Nothing,但值可以。键和值可以是任何对象,例如字符串,自定义类等。当插入键/值对到哈希表中时,Hashtable使用每个键所引用对象的GetHashCode()方法,获取一个哈希编码,存人Hashtable中。
属性
comparer | |
Count | 获取包含在 Hashtable 中的键/值对的数目。 |
EqualityComparer | 获取要用于 IEqualityComparer 的 Hashtable。 |
hcp | 获取或设置可分配哈希代码的对象。 |
IsFixedSize | 获取一个值,该值指示 Hashtable 是否具有固定大小。 |
IsReadOnly | 获取一个值,该值指示 Hashtable 是否为只读。 |
Item[Object] | 获取或设置与指定的键关联的值。 |
Keys | 获取包含 ICollection 中的键的 Hashtable。 |
Values | 获取一个 ICollection,它包含 Hashtable 中的值。 |
方法
Add(Object, Object) | 将带有指定键和值的元素添加到 Hashtable 中。 |
Clear() | 从 Hashtable 中移除所有元素。 |
Clone() | 创建 Hashtable 的浅表副本。 |
Contains(Object) | 确定 Hashtable 是否包含特定键。 |
ContainsKey(Object) | 确定 Hashtable 是否包含特定键。 |
ContainsValue(Object) | 确定 Hashtable 是否包含特定值。 |
CopyTo(Array, Int32) | |
Equals(Object) | 确定指定的对象是否等于当前对象。 (继承自 Object) |
GetType() | |
KeyEquals(Object, Object) | |
MemberwiseClone() | |
Remove(Object) | 从 Hashtable 中移除包含指定键的元素。 |
构造函数
Hashtable() | 使用默认的初始容量、加载因子、哈希代码提供程序和比较器来初始化 Hashtable 类的新的空实例。 |
Hashtable(IDictionary) | 通过将指定字典中的元素复制到新的 Hashtable 对象中,初始化 Hashtable 类的一个新实例。 新 Hashtable 对象的初始容量等于复制的元素数,并且使用默认的加载因子、哈希代码提供程序和比较器。 |
Hashtable(Int32) | 使用指定的初始容量、默认加载因子、默认哈希代码提供程序和默认比较器来初始化 Hashtable 类的新的空实例。 |
Hashtable(Int32, Single) | 使用指定的初始容量、指定的加载因子、默认的哈希代码提供程序和默认比较器来初始化 Hashtable 类的新的空实例。 |
将某个元素添加到Hashtable时,将根据键的哈希代码将该元素放入存储桶中。该键的后续查找将使用键的哈希代码在一个特定存储桶中搜索,这将大大减少为查找一个元素所需的键比较的次数。
Hashtable的加载因子确定元素与存储桶的最大比率。加载因子越小,平均查找速度越快,但消耗的内存也越大。默认的加载因子为1.0,通常提供速度和大小之间的最佳平衡。
示例:
Module Module1
Private Sub PrintIndexKeysAndValues(ByVal ht As Hashtable)
Dim i As Integer
Console.WriteLine(vbTab + "-INDEX-" + vbTab + "-KEY-" & vbTab & "-VALUE-")
Dim de As DictionaryEntry
For Each de In ht
Console.WriteLine(vbTab & "[{0}]:" & vbTab & "{1}" & vbTab & "{2}", i, de.Key, de.Value)
i = i + 1
Next
Console.WriteLine()
End Sub
Sub Main()
Dim myHash As New Hashtable
myHash.Add(0, "Zero")
myHash.Add(1, "One")
myHash.Add(2, "Two")
myHash.Add(3, "Three")
myHash.Add(4, "Four")
Console.WriteLine("哈希表的内容:")
PrintIndexKeysAndValues(myHash)
Dim myKey As Integer = 2
Console.Write("搜索键{0}", myKey)
If myHash.ContainsKey(myKey) Then
Console.WriteLine(",该键的值为{0}", myHash(myKey))
Else
Console.WriteLine(",该键不存在")
End If
myKey = 6
Console.Write("搜索键{0}", myKey)
If myHash.ContainsKey(myKey) Then
Console.WriteLine(",该键的值为{0}", myHash(myKey))
Else
Console.WriteLine(",该键不存在")
End If
Dim myValue As String = "Three"
Console.Write("搜索值{0}", myValue)
If myHash.ContainsValue(myValue) Then
Dim strID As String '要查找的key
Dim tmp As DictionaryEntry
For Each jzd In myHash
If myValue = jzd.Value Then strID = jzd.Key
Next
Console.WriteLine(",该值的键{0}", strID)
Else
Console.WriteLine(",该值不存在")
End If
Console.Read()
End Sub
End Module