当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C# Hashtable用法及代码示例


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

参考:



相关用法


注:本文由纯净天空筛选整理自ankita_saini大神的英文原创作品 C# | Hashtable Class。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。