Dictionary与Hashtable的区别

36 浏览
0 Comments

Dictionary与Hashtable的区别

这个问题已经有了答案:

可能是重复问题:

为什么 C# 中首选 Dictionary 而不是 Hashtable?

Dictionary 和 Hashtable 之间的区别是什么?如何决定使用哪个?

admin 更改状态以发布 2023年5月21日
0
0 Comments

让我们举一个例子来解释hashtable和dictionary之间的差别。

这里有一个使用hashtable实现的方法

public void MethodHashTable()
{
    Hashtable objHashTable = new Hashtable();
    objHashTable.Add(1, 100);    // int
    objHashTable.Add(2.99, 200); // float
    objHashTable.Add('A', 300);  // char
    objHashTable.Add("4", 400);  // string
    lblDisplay1.Text = objHashTable[1].ToString();
    lblDisplay2.Text = objHashTable[2.99].ToString();
    lblDisplay3.Text = objHashTable['A'].ToString();
    lblDisplay4.Text = objHashTable["4"].ToString();
    // ----------- Not Possible for HashTable ----------
    //foreach (KeyValuePair pair in objHashTable)
    //{
    //    lblDisplay.Text = pair.Value + " " + lblDisplay.Text;
    //}
}

下面是dictionary的实现

  public void MethodDictionary()
  {
    Dictionary dictionary = new Dictionary();
    dictionary.Add("cat", 2);
    dictionary.Add("dog", 1);
    dictionary.Add("llama", 0);
    dictionary.Add("iguana", -1);
    //dictionary.Add(1, -2); // Compilation Error
    foreach (KeyValuePair pair in dictionary)
    {
        lblDisplay.Text = pair.Value + " " + lblDisplay.Text;
    }
  }

0
0 Comments

简单来说,Dictionary是一个泛型类型,允许:

  • 静态类型(和编译时验证)
  • 使用时不需要Boxing

如果您使用的是.NET 2.0或更高版本,则应该使用Dictionary(以及其他泛型集合)

一个微妙但重要的区别是,Hashtable支持单个写线程的多个读取线程,而Dictionary不提供线程安全。如果您需要使用线程安全的泛型字典,您必须自己实现同步,或者(在.NET 4.0中)使用ConcurrentDictionary

0