2011-09-24 95 views
0

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

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

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

< =使用密钥,但我不知道...

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

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

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

从我所知道的,如果我们使用Dictionary来查找一个值,获取值的速度将随着Dictionary的增长而增长。

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

一直纳闷了很长一段时间是我的假设是正确的:)

感谢

+0

“长久以来一直在怀疑”现在有一个问题。 – BoltClock

+0

:p这就是为什么我现在要清理它 –

回答

2

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

+0

谢谢〜现在我明白了。但是数据集/数据表与散列表类似吗?当我们将一列添加到数据表中时,他们实际上创建了一个用于访问centain列的hashkey?即myDataTable.Columns [“MyColumn”] –

+1

并非所有的'O(1)'都是相同的:[Big-Oh](http://en.wikipedia.org/wiki/Big_O_notation)只谈到渐近行为 - 那里在前面可能是一个*真的很大*'C':'C * O(...)'。 – 2011-09-24 05:44:45

+0

@陈陈:哈希表与数据表非常不同。数据表实际上是一个二维结构。访问列不涉及散列键。散列表不是同一意义上的表,它只是一种稀疏的随机数组。 –

2

通过密钥与字典找到一个元素的摊销成本为O(1)或不变(见"Resizable hash tables and amortized analysis"为CS基本面)。基础数据结构不是数组或列表,而是散列表 - 给定适当的散列函数,访问价值成本的速度不会随着元素数量的增加而显着增大(因此是恒定的),除非这些元素中的许多或大多数元素具有相同的哈希码。

相关问题