[英]List vs Dictionary (Hashtable)
这可能是一个愚蠢的问题,但我读到Hashtables
和Dictionaries
比列表更快,因为他们用键索引项目。
我知道List
或Array
是针对没有值的元素,而Dictionary
是针对具有值的元素。 因此,我认为拥有一个具有您需要的值作为键的Dictionary
并且所有值都相等的Dictionary
可能是明智的吗?
更新 :
基于评论,我认为我需要的是HashSet
。 这个问题谈到了他们的表现。
Dictionary / Hashtable与List /数组之间也存在一些缺点:
使用适合的情况。 有时这将是一个列表或一个数组。 有时它会是一个字典。 你几乎不应该再使用HashTable了(如果你真的不存储你正在存储的类型,则更喜欢Dictionary <KeyType,Object>)。
1它通常是唯一的,但由于冲突的可能性很小,因此集合必须在计算哈希值后检查存储桶。
“更快”取决于你需要它们。
.NET List
只是连续内存的一块(这不是链接列表),这使得顺序访问非常有效(特别是当您考虑缓存和预取现代CPU的影响时)或“随机”通过已知的整数索引。 搜索或插入元素(特别是在中间) - 不是那么多。
Dictionary
是一种关联数据结构 - 一个键可以是任何可哈希的(不仅仅是整数索引),但是元素不是以“有意义”的方式排序,而通过已知键的访问不如List
的整数索引那么快。
因此,为工作选择合适的工具。
您的语句“列表或数组用于没有值的元素,而字典用于具有值的元素”,并非严格来说。
更准确地说,List是元素的集合,Hashtable或Dictionary是元素的集合以及用于访问每个元素的唯一键。
将列表用于极少数元素的集合,或者只需要访问整个集合,而不是集合中的单个元素。
当集合很大时和/或当您需要查找/访问集合的各个成员时,请使用Hashtable或Dictionary。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.