Hashtable 类表示根据键的哈希码组织的键/值对的集合。此类位于 System.Collections 命名空间下。 Hashtable 类提供了各种类型的方法,用于对哈希表执行不同类型的操作。在哈希表中,键用于访问集合中存在的元素。对于非常大的 Hashtable 对象,您可以在 64 位系统上将最大容量增加到 20 亿个元素。
Hashtable类的特点:
- 在 Hashtable 中,key 不能为 null,但 value 可以。
- 在 Hashtable 中,键对象必须是不可变的,只要它们用作 Hashtable 中的键即可。
- Hashtable 的容量是 Hashtable 可以容纳的元素数量。
- 哈希表中的每个键对象都提供哈希函数。
Constructors
CONSTRUCTOR | DESCRIPTION |
---|---|
Hashtable() | 使用默认初始容量、加载因子、哈希代码提供程序和比较器初始化 Hashtable 类的新空实例。 |
Hashtable(IDictionary) | 通过将指定字典中的元素复制到新的 Hashtable 对象来初始化 Hashtable 类的新实例。新的 Hashtable 对象的初始容量等于复制的元素数量,并使用默认的加载因子、哈希码提供程序和比较器。 |
Hashtable(IDictionary, IEqualityComparer) | 通过将指定字典中的元素复制到新的 Hashtable 对象来初始化 Hashtable 类的新实例。新的 Hashtable 对象的初始容量等于复制的元素数,并使用默认加载因子和指定的 IEqualityComparer 对象。 |
Hashtable(IDictionary, IHashCodeProvider, IComparer) | 通过将指定字典中的元素复制到新的 Hashtable 对象来初始化 Hashtable 类的新实例。新的 Hashtable 对象的初始容量等于复制的元素数,并使用默认的加载因子以及指定的哈希码提供程序和比较器。该 API 已过时。有关替代方案,请参阅 Hashtable(IDictionary, IEqualityComparer)。 |
Hashtable(IDictionary, Single) | 通过将指定字典中的元素复制到新的 Hashtable 对象来初始化 Hashtable 类的新实例。新的 Hashtable 对象的初始容量等于复制的元素数,并使用指定的加载因子以及默认的哈希代码提供程序和比较器。 |
Hashtable(IDictionary, Single, IEqualityComparer) | 通过将指定字典中的元素复制到新的 Hashtable 对象来初始化 Hashtable 类的新实例。新的 Hashtable 对象的初始容量等于复制的元素数,并使用指定的加载因子和 IEqualityComparer 对象。 |
Hashtable(IDictionary, Single, IHashCodeProvider, IComparer) | 通过将指定字典中的元素复制到新的 Hashtable 对象来初始化 Hashtable 类的新实例。新的 Hashtable 对象的初始容量等于复制的元素数,并使用指定的加载因子、哈希码提供程序和比较器。 |
Hashtable(IEqualityComparer) | 使用默认初始容量和负载因子以及指定的 IEqualityComparer 对象初始化 Hashtable 类的新空实例。 |
Hashtable(IHashCodeProvider, IComparer) | 使用默认初始容量和负载因子以及指定的哈希代码提供程序和比较器初始化 Hashtable 类的新的空实例。 |
哈希表(Int32) | 使用指定的初始容量、默认加载因子、哈希代码提供程序和比较器初始化 Hashtable 类的新的空实例。 |
哈希表(Int32,IEqualityComparer) | 使用指定的初始容量和 IEqualityComparer 以及默认加载因子初始化 Hashtable 类的新的空实例。 |
哈希表(Int32、IHashCodeProvider、IComparer) | 使用指定的初始容量、哈希代码提供程序、比较器和默认加载因子初始化 Hashtable 类的新的空实例。 |
哈希表(Int32,单) | 使用指定的初始容量和负载因子以及默认的哈希代码提供程序和比较器初始化 Hashtable 类的新的空实例。 |
哈希表(Int32、Single、IEqualityComparer) | 使用指定的初始容量、加载因子和 IEqualityComparer 对象初始化 Hashtable 类的新的空实例。 |
哈希表(Int32、Single、IHashCodeProvider、IComparer) | 使用指定的初始容量、加载因子、哈希代码提供程序和比较器初始化 Hashtable 类的新的空实例。 |
Hashtable(SerializationInfo, StreamingContext) | 初始化 Hashtable 类的新的空实例,该实例可使用指定的 SerializationInfo 和 StreamingContext 对象进行序列化。 |
例子:
C#
// C# program to create Hashtable
using System;
using System.Collections;
class GFG {
// Main method
static void Main(string[] args)
{
// create and initialize Hash table
// using Add() method
Hashtable g = new Hashtable();
g.Add(1, "welcome");
g.Add(2, "to");
g.Add(3, "tutorials");
g.Add(4, "of");
g.Add(5, "C#");
ICollection key = g.Keys;
// Print Hash table
Console.WriteLine("Hashtable:");
Console.WriteLine();
foreach(var val in key)
{
Console.WriteLine(val + "-" + g[val]);
}
}
}
输出:
Hashtable: 5-C# 4-of 3-tutorials 2-to 1-welcome
Properties
PROPERTY | DESCRIPTION |
---|---|
comparer | 获取或设置用于 Hashtable 的 IComparer。 |
Count | 获取 Hashtable 中包含的键/值对的数量。 |
EqualityComparer | 获取用于 Hashtable 的 IEqualityComparer。 |
hcp | 获取或设置可以分配哈希码的对象。 |
IsFixedSize | 获取一个值,该值指示 Hashtable 是否具有固定大小。 |
IsReadOnly | 获取一个值,该值指示 Hashtable 是否为只读。 |
IsSynchronized | 获取一个值,该值指示对 Hashtable 的访问是否同步(线程安全)。 |
项目[对象] | 获取或设置与指定键关联的值。 |
Keys | 获取包含 Hashtable 中的键的 ICollection。 |
SyncRoot | 获取可用于同步对 Hashtable 的访问的对象。 |
Values | 获取包含 Hashtable 中的值的 ICollection。 |
例子:
C#
// C# Program to illustrate the
// Properties of Hashtable
using System;
using System.Collections;
class GFG {
// Main method
static void Main(string[] args)
{
// create and initialize Hash table
// using Add() method
Hashtable has1 = new Hashtable();
has1.Add("1", "Welcome");
has1.Add("2", "to");
has1.Add("3", "geeks");
has1.Add("4", "for");
has1.Add("5", "geeks");
// --------- Using IsSynchronized Property
// Creating a synchronized packing
// around the Hashtable
Hashtable has2 = Hashtable.Synchronized(has1);
// print the status of both Hashtables
Console.WriteLine("has1 Hashtable is {0}.",
has1.IsSynchronized ? "synchronized" :
"not synchronized");
Console.WriteLine("has2 Hashtable is {0}.",
has2.IsSynchronized ? "synchronized" :
"not synchronized");
// --------- Using Count Property
Console.WriteLine("Total Number of Elements in has1: "
+ has1.Count);
}
}
输出:
has1 Hashtable is not synchronized. has2 Hashtable is synchronized. Total Number of Elements in has1: 5
Methods
METHOD | DESCRIPTION |
---|---|
Add(Object, Object) | 将具有指定键和值的元素添加到哈希表中。 |
Clear() | 从哈希表中删除所有元素。 |
Clone() | 创建哈希表的浅拷贝。 |
Contains(Object) | 确定哈希表是否包含特定键。 |
ContainsKey(Object) | 确定哈希表是否包含特定键。 |
ContainsValue(Object) | 确定哈希表是否包含特定值。 |
复制到(数组,Int32) | 将 Hashtable 元素复制到指定索引处的一维 Array 实例。 |
Equals(Object) | 确定指定对象是否等于当前对象。 |
GetEnumerator() | 返回一个迭代 Hashtable 的 IDictionaryEnumerator。 |
GetHash(Object) | 返回指定键的哈希码。 |
GetHashCode() | 用作默认的哈希函数。 |
GetObjectData(SerializationInfo, StreamingContext) | 实现 ISerialized 接口并返回序列化 Hashtable 所需的数据。 |
GetType() | 获取当前实例的类型。 |
KeyEquals(Object, Object) | 将特定对象与哈希表中的特定键进行比较。 |
MemberwiseClone() | 创建当前对象的浅拷贝。 |
OnDeserialization(Object) | 实现 ISerialized 接口并在反序列化完成时引发反序列化事件。 |
Remove(Object) | 从哈希表中删除具有指定键的元素。 |
Synchronized(Hashtable) | 返回哈希表的同步(线程安全)包装器。 |
ToString() | 返回表示当前对象的字符串。 |
例子:
C#
// C# program to illustrate Add()
// and Remove() Methods
using System;
using System.Collections;
class Program {
// Main method
static void Main(string[] args)
{
// -------- Add() Method --------
// create and initialize Hash table
// using Add() method
Hashtable g = new Hashtable();
g.Add("1", "Welcome");
g.Add("2", "to");
g.Add("3", "Geeks");
g.Add("4", "for");
g.Add("5", "Geeks");
ICollection key = g.Keys;
// Print Hash table
Console.WriteLine("Hashtable Contains:");
foreach(var val in key)
{
Console.WriteLine(val + "-" + g[val]);
}
Console.WriteLine();
// --------- Remove() Method ----------'
// Remove element 4
// using Remove() method
g.Remove("4");
// printing updated Hash table
Console.WriteLine("Hashtable after removing element 4:");
foreach(var val in key)
{
Console.WriteLine(val + "-" + g[val]);
}
}
}
输出:
Hashtable Contains: 2-to 3-Geeks 5-Geeks 1-Welcome 4-for Hashtable after removing element 4: 2-to 3-Geeks 5-Geeks 1-Welcome
参考:
相关用法
- C# Hashtable和Dictionary的区别用法及代码示例
- C# HashSet用法及代码示例
- C# HybridDictionary用法及代码示例
- C# String Clone()用法及代码示例
- C# String Compare()用法及代码示例
- C# String CompareOrdinal()用法及代码示例
- C# String CompareTo()用法及代码示例
- C# String Concat()用法及代码示例
- C# String Contains()用法及代码示例
- C# String Copy()用法及代码示例
- C# String CopyTo()用法及代码示例
- C# String EndsWith()用法及代码示例
- C# String Equals()用法及代码示例
- C# String Format()用法及代码示例
- C# String GetEnumerator()用法及代码示例
- C# String IndexOf()用法及代码示例
- C# String Insert()用法及代码示例
- C# String IsInterned()用法及代码示例
- C# String IsNormalized()用法及代码示例
- C# String IsNullOrEmpty()用法及代码示例
- C# String IsNullOrWhiteSpace()用法及代码示例
- C# String Join()用法及代码示例
- C# String LastIndexOf()用法及代码示例
- C# String LastIndexOfAny()用法及代码示例
- C# String Normalize()用法及代码示例
注:本文由纯净天空筛选整理自ankita_saini大神的英文原创作品 C# | Hashtable Class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。