【发布时间】:2011-07-07 22:17:12
【问题描述】:
字典和哈希表有什么区别。我如何才能得出使用哪个结论?谁能帮帮我?
【问题讨论】:
标签: c# .net collections
字典和哈希表有什么区别。我如何才能得出使用哪个结论?谁能帮帮我?
【问题讨论】:
标签: c# .net collections
我也是哈希表的新手,但是...
字典是一个基本的表,有两列(键和值,都有特定的类型)和很多你以后添加的行。您会看到在字典中您提供了一个键,而字典为您提供了您之前通过完全相同的键添加的值。
在哈希表中,情况略有不同。您再次拥有包含两列的表(键和值,均为“对象”类型)。键可能不是唯一的。现在您实际上有两张表:一张有两列:Key 和 Hash,另一张还有两列 Hash 和 Value。哈希是从 Key 得到的一些整数值。事实证明,虽然 Keys 可能是唯一的,但 Hashes 可能不是。 [但我不确定这个...所以我说“虚拟”...]
现在的例子:
Hashtable ht = new Hashtable();
// Key of type Int32
ht[16] = "That is Int32";
// Key of type String
ht["Blah"] = 15;
// Key of type Boolean
ht[false] = "That is boolean";
// Key of type String
ht["Hohoho"] = false;
稍后您可以使用键访问存储在 Hashtable 中的任何值(如果没有这样的键,则返回 null):
Console.WriteLine("ht[{0}] = {1};", 16, ht[16] ?? "null");
Console.WriteLine("ht[{0}] = {1};", "Test", ht["Test"] ?? "null"); // doesnt exist eh...
Console.WriteLine("ht[{0}] = {1};", false, ht[false] ?? "null");
Console.WriteLine("ht[{0}] = {1};", "Hohoho", ht["Hohoho"] ?? "null");
总结一下:
字典是这样的:
[ Key ][ Value ]
A 1.5
B 1.6
C -8
....
Hashtable 大概是这样的:
[ Key ][ Hash ]
A 1
B 2
C -99
...
[ Hash ][ Value ]
-99 -8
1 1.6
2 1.5
....
我希望这对您有所帮助。任何可以更好地解释它的人,不要犹豫。
谢谢你,祝你好运。
【讨论】:
Dictionary 类不同于 Hashtable 类的方式不止一种。 除了是强类型之外, 词典还采用了 不同的碰撞分辨率 策略比 Hashtable 类, 使用一种称为 链接。
您可以阅读这篇文章:http://msdn.microsoft.com/en-us/library/ms379571(v=vs.80).aspx#datastructures20_2_topic6
真的很有用。
【讨论】:
哈希表已过时。始终使用字典。
【讨论】: