當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。