字典和哈希表之间的区别
可能重复:
为什么词典比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