从集合中访问元素的最快方法是什么?

时间:2011-09-24 05:23:53

标签: c#

从集合中访问元素的最快方法是什么?

我在想是应该按顺序(从低到高):

索引数组< =索引集合/列表< =使用字典

上的键

但我不确定......

1)索引数组与索引列表的速度是否相同?

2)索引速度会随着数组/列表大小的增长而增长吗?

从我的理解......索引数组应该使用指针指向元素的索引,这是由元素大小计算的。所以它应该与索引收集/列表具有相同的速度?

据我所知,如果我们使用Dictionary来查找值,获取值的速度将随着Dictionary的大小增长而增长。

3)我只是想知道从集合中访问元素的最快方法是什么?

长期以来一直在想我的假设是否正确:)

由于

2 个答案:

答案 0 :(得分:2)

使用字典按键查找元素的分摊成本为O(1)或常量(对于CS基础知识,请参见"Resizable hash tables and amortized analysis")。底层数据结构不是数组或列表,而是散列表 - 给定适当的散列函数,访问值成本的速度不会随着元素数量的增加而显着增大(因此是不变的),除非这些元素中有许多或大部分具有相同的哈希码。

答案 1 :(得分:2)

在C#中,List由数组支持,因此数组和列表/集合都可以通过在O(1)时间内建立索引来访问元素。字典的性能类似,因为它由哈希表支持。然而,应该注意,散列表上的访问性能与散列函数的质量和特定数据集中发生的冲突的数量有关。在C#中,每个类型都可以覆盖GetHashCode(),这将确定哈希函数,从而确定在字典中特定的一组此类对象中访问此类对象的性能。