这可能是一个愚蠢的问题,但我正在阅读它Hashtables
并且Dictionaries
比列表更快,因为它们使用键索引项目。
我知道 a List
orArray
用于没有值的元素,而 aDictionary
用于具有值的元素。所以我认为拥有一个Dictionary
你需要的值作为键并且所有这些值都相等可能是明智的?
更新:
根据评论,我认为我需要的是HashSet
. 这个问题谈论他们的表现。
“更快”取决于您需要它们做什么。
.NETList
只是一块连续内存(这不是链表),这使得顺序访问(尤其是考虑现代 CPU 的缓存和预取的影响)或通过已知整数“随机”访问非常有效指数。搜索或插入元素(尤其是在中间) - 不是那么多。
Dictionary
是一种关联数据结构 - 键可以是任何可散列的(不仅仅是整数索引),但元素没有以“有意义”的方式排序,并且通过已知键的访问速度不如List
整数索引。
因此,为工作选择合适的工具。
字典/哈希表与列表/数组也有一些弱点:
使用适合情况的东西。有时这将是一个列表或数组。有时它会是一个字典。您几乎不应该再使用 HashTable (如果您真的不知道要存储的类型,请选择 Dictionary<KeyType, Object>)。
1它通常是唯一的,但由于发生冲突的可能性很小,因此集合必须在计算哈希值后检查存储桶。
您的陈述“列表或数组适用于没有值的元素,而字典适用于有值的元素”,严格来说并不正确。
更准确地说,List 是元素的集合,而 Hashtable 或 Dictionary 是元素的集合以及用于访问每个元素的唯一键。
为极少数元素的集合使用列表,或者当您只需要访问整个集合而不是集合的单个元素时。
当集合很大和/或当您需要查找/访问集合的各个成员时,请使用哈希表或字典。