字典和哈希表的主要区别是什么?

6

字典和哈希表有什么区别?我该如何得出使用哪个的结论?能否有人帮助我吗?


3
为什么在 C# 中字典(Dictionary)比哈希表(Hashtable)更受欢迎?在 C# 中,字典(Dictionary)和哈希表(Hashtable)都可以用于存储键值对数据。然而,在实践中,字典(Dictionary)比哈希表(Hashtable)更常用。这是因为字典(Dictionary)的工作方式更加简单明了,它使用泛型来提高类型安全性,并且在内部实现中使用了哈希表(Hashtable)。此外,字典(Dictionary)还提供了一些方便的功能,例如 LINQ 查询支持和更好的可读性。相比之下,哈希表(Hashtable)需要手动进行类型转换并且没有泛型支持,这使得代码更容易出错。此外,由于哈希表(Hashtable)是在 .NET Framework 1.1 引入的,因此它的实现不如字典(Dictionary)那样现代化和优化,可能会导致性能问题。因此,在 C# 中,字典(Dictionary)通常是更好的选择。 - Douglas
请参考以下类似问题:https://dev59.com/SnNA5IYBdhLWcg3wHp6B - Matt F
3个回答

6

1

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

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

在哈希表中,事情略有不同。您再次拥有两列的表格(键和值,都是“对象”类型)。键可能不唯一。现在您实际上有两个表格:一个有两列:键和哈希,另一个有两列哈希和值。哈希是从键获取的某个整数值。结果发现,虽然键可能是唯一的,但哈希可能不是。(但我还不确定...所以我说“实际上”...)

现在举个例子:

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
      ....

希望这对你有所帮助。如果有人能更好地解释,请不要犹豫。

谢谢,祝好运。


1

Hashtable已经过时,请始终使用Dictionary。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接