字典和哈希表之间的主要区别是啥

Posted

技术标签:

【中文标题】字典和哈希表之间的主要区别是啥【英文标题】:What is the primary difference between Dictionary and Hashtable字典和哈希表之间的主要区别是什么 【发布时间】:2011-07-07 22:17:12 【问题描述】:

字典和哈希表有什么区别。我如何才能得出使用哪个结论?谁能帮帮我?

【问题讨论】:

***.com/questions/301371/… 查看以下类似问题:***.com/questions/1089132/… 【参考方案1】:

我也是哈希表的新手,但是...

字典是一个基本的表,有两列(键和值,都有特定的类型)和很多你以后添加的行。您会看到在字典中您提供了一个键,而字典为您提供了您之前通过完全相同的键添加的值。

在哈希表中,情况略有不同。您再次拥有包含两列的表(键和值,均为“对象”类型)。键可能不是唯一的。现在您实际上有两张表:一张有两列: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
      ....

我希望这对您有所帮助。任何可以更好地解释它的人,不要犹豫。

谢谢你,祝你好运。

【讨论】:

【参考方案2】:

Dictionary 类不同于 Hashtable 类的方式不止一种。 除了是强类型之外, 词典还采用了 不同的碰撞分辨率 策略比 Hashtable 类, 使用一种称为 链接。

您可以阅读这篇文章:http://msdn.microsoft.com/en-us/library/ms379571(v=vs.80).aspx#datastructures20_2_topic6

真的很有用。

【讨论】:

【参考方案3】:

哈希表已过时。始终使用字典。

【讨论】:

以上是关于字典和哈希表之间的主要区别是啥的主要内容,如果未能解决你的问题,请参考以下文章

字典与哈希表(HashMap)

稀疏哈希表背后的主要实现思想是啥?

js 数据结构 字典 哈希表

哈希表/字典冲突

redis hset 和hsetnx 的区别是啥

普通集合和泛型集合的区别,哈希表和字典表的区别,队列和堆栈的区别以及堆和栈的区别。