.NET列表上的随机访问速度很慢,但如果我总是引用第一个元素呢?

use*_*285 3 .net c# f# list random-access

我知道,一般来说,.NET列表不适合随机访问.我总是被告知阵列最适合那个.我有一个程序需要不断(比如超过十亿次)访问.NET列表的第一个元素,我想知道这是否会减慢任何速度,或者它无关紧要因为它是第一个元素名单.我还做了很多其他的事情,比如在我进行的过程中添加和删除列表中的项目,但List永远不会是空的.

我正在使用F#,但我认为这适用于任何.NET语言(我使用.NET列表,而不是F#列表).我的列表大约有100个元素.

scr*_*wtp 5

在F#中,.NET list(System.Collections.Generic.List)被恰当地混淆为ResizeArray,这使人们对预期的结果毫无疑问.这是一个可以调整自身大小的数组,而不是CS课堂对该术语的理解.它与简单数组之间的任何性能差异很可能来自编译器可以更积极地优化数组使用的事实.

回到你的问题.如果您只访问列表的第一个元素,那么您选择的内容无关紧要.a ResizeArray和a list(使用F#lingo)都有O(1)访问第一个元素(head).

list如果您的其他操作也适用于head元素,那么A 将是一个更好的选择,即您只需从头部添加元素.如果你想将元素附加到列表的末尾,或者改变一些已经存在的元素,你可以获得更好的里程数ResizeArray.

也就是说,一个ResizeArray自觉的F#代码是一种罕见的景象.通常的方法有利于(并且不会使用)不可变数据结构,因此通常会看到一个对我来说是一个小红旗.