在C#中,哈希表(Hashtable)是一種數據結構,用于存儲鍵值對。當哈希表的元素數量達到一定程度時,為了保持性能和減少沖突,它會自動進行擴容。以下是C#哈希表擴容的基本過程:
當哈希表中的元素數量達到容量與負載因子(load factor)的乘積時,哈希表會觸發擴容。負載因子是一個浮點數,通常設置為0.75,表示在容量達到75%時進行擴容。
擴容時,哈希表會創建一個新的桶數組(bucket array),其大小是原數組的兩倍。這樣可以確保更多的鍵值對可以被存儲,從而減少沖突的發生。
接下來,哈希表會遍歷原桶數組中的所有元素,并使用新的桶數組大小重新計算它們的哈希值。然后,將這些元素插入新的桶數組中。
最后,哈希表會將新的桶數組賦值給原桶數組,完成擴容操作。
需要注意的是,擴容操作可能會導致性能下降,因為在重新計算哈希值并插入新的桶數組時需要消耗一定的時間。因此,在選擇哈希表的初始容量和負載因子時,需要權衡性能和內存占用。
在C#中,你可以使用System.Collections.Hashtable
類來創建和操作哈希表。以下是一個簡單的示例:
using System;
using System.Collections;
class Program
{
static void Main()
{
Hashtable hashtable = new Hashtable();
// 添加元素到哈希表
hashtable.Add("key1", "value1");
hashtable.Add("key2", "value2");
hashtable.Add("key3", "value3");
// 獲取哈希表中的元素
Console.WriteLine(hashtable["key1"]); // 輸出: value1
// 遍歷哈希表
foreach (DictionaryEntry entry in hashtable)
{
Console.WriteLine($"Key: {entry.Key}, Value: {entry.Value}");
}
}
}
在這個示例中,我們創建了一個哈希表,并向其中添加了一些元素。當哈希表的元素數量達到一定程度時,它會自動進行擴容。