C# 列表与字典(哈希表)

C# 列表与字典(哈希表),c#,.net,C#,.net,这可能是一个愚蠢的问题,但我读到的是哈希表和字典比列表快,因为它们用键索引项目 我知道列表或数组用于无值元素,而字典用于有值元素。因此,我认为拥有一个字典可能是明智的,它的值是您需要的一个键,并且它们的值都相等 更新: 根据评论,我认为我需要的是一个哈希集。这涉及到它们的性能。您的语句“列表或数组用于不带值的元素,字典用于带值的元素”严格来说不是真的 更准确地说,列表是元素的集合,哈希表或字典是元素的集合以及用于访问每个元素的唯一键 对于包含极少数元素的集合,或者只需要访问整个集合而不需要访问集

这可能是一个愚蠢的问题,但我读到的是
哈希表
字典
比列表快,因为它们用键索引项目

我知道
列表
数组
用于无值元素,而
字典
用于有值元素。因此,我认为拥有一个
字典
可能是明智的,它的值是您需要的一个键,并且它们的值都相等

更新

根据评论,我认为我需要的是一个
哈希集。这涉及到它们的性能。

您的语句“列表或数组用于不带值的元素,字典用于带值的元素”严格来说不是真的

更准确地说,列表是元素的集合,哈希表或字典是元素的集合以及用于访问每个元素的唯一键

对于包含极少数元素的集合,或者只需要访问整个集合而不需要访问集合的单个元素时,请使用列表


当集合较大和/或需要查找/访问集合的单个成员时,请使用哈希表或字典。

字典/哈希表与列表/数组相比也有一些缺点:

  • 您必须在每次查找时计算对象的哈希值
  • 对于小集合,遍历数组可能比计算该哈希更快,特别是因为哈希不能保证是唯一的1
  • 他们不太擅长遍历项目列表
  • 它们不太擅长存储重复的条目(有时您合理地希望一个值在数组中多次显示)
  • 有时,类型没有与之关联的好键
使用适合情况的工具。有时,这将是一个列表或数组。有时它会是一本字典。您几乎不应该再使用哈希表了(如果您真的不知道存储的是什么类型的话,最好使用字典)

1它通常是唯一的,但由于存在较小的冲突可能性,因此集合必须在计算哈希值后检查存储桶。

“更快”取决于您需要它们做什么

a.net >代码> list <代码>只是一个连续内存的板(这不是一个链表),这使得顺序访问非常有效(特别是当考虑到缓存和预取的现代CPU的影响)或“随机”以已知的<强>整数< /强>索引时。搜索或插入元素(特别是在中间)-不太多

Dictionary
是一种关联数据结构-一个键可以是任何可散列的(不仅仅是整数索引),但元素没有以“有意义”的方式排序,并且通过已知键的访问速度不如
List
的整数索引快


因此,为这项工作选择合适的工具。

哈希表和字典比列表快。
。取决于您对它们所做的操作。A将提供您使用
字典
和使用键(而不是值)所考虑的功能。问题是它们必须是唯一的,但是如果使用
Dictionray
“您需要的值作为键”
这将无法实现,如果您有重复的值