字典和哈希表之间的区别

可能重复:
为什么词典比C#中的散列表更受欢迎?

Dictionary和Hashtable有什么区别。 如何决定使用哪一个?


简单地说, Dictionary<TKey,TValue>是一个通用类型,允许:

  • 静态类型(和编译时验证)
  • 没有拳击使用
  • 如果你是.NET 2.0或更高版本,你应该更喜欢Dictionary<TKey,TValue> (和其他通用集合)

    一个微妙但重要的区别是Hashtable支持多个阅读器线程,只有一个写入器线程,而Dictionary提供线程安全。 如果使用通用字典需要线程安全性,则必须实现自己的同步或(在.NET 4.0中)使用ConcurrentDictionary<TKey, TValue>


    让我们举一个例子来解释散列表和字典之间的区别。

    这是一个实现散列表的方法

    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<string, int> pair in objHashTable)
        //{
        //    lblDisplay.Text = pair.Value + " " + lblDisplay.Text;
        //}
    }
    

    以下是字典

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

    HashTable和Dictionary之间还有一个更重要的区别。 如果使用索引器从HashTable中获取值,则HashTable将成功地为不存在的项目返回null,而如果尝试使用字典中不存在的索引器访问项目,Dictionary将引发错误

    链接地址: http://www.djcxy.com/p/16359.html

    上一篇: Difference between Dictionary and Hashtable

    下一篇: Java: how to convert HashMap<String, Object> to array