字典和哈希表有什么区别?我该如何得出使用哪个的结论?能否有人帮助我吗?
字典和哈希表有什么区别?我该如何得出使用哪个的结论?能否有人帮助我吗?
字典类与哈希表类有许多不同。除了具有强类型特性外,字典类还采用了一种不同的冲突解决策略,称为“链接”技术。
你可以阅读这篇文章:http://msdn.microsoft.com/en-us/library/ms379571(v=vs.80).aspx#datastructures20_2_topic6
这真的很有用。
我也是哈希表的新手,但是...
字典是一个基本的表格,有两列(键和值,都有特定的类型),以及您稍后添加的许多行。您将看到,在字典中,您提供一个键,字典会通过完全相同的键为您提供先前添加的值。
在哈希表中,事情略有不同。您再次拥有两列的表格(键和值,都是“对象”类型)。键可能不唯一。现在您实际上有两个表格:一个有两列:键和哈希,另一个有两列哈希和值。哈希是从键获取的某个整数值。结果发现,虽然键可能是唯一的,但哈希可能不是。(但我还不确定...所以我说“实际上”...)
现在举个例子:
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
....
希望这对你有所帮助。如果有人能更好地解释,请不要犹豫。
谢谢,祝好运。
Hashtable已经过时,请始终使用Dictionary。