Vik*_*ren 0 c# arraylist capacity
我今天的输入大约是450,未来可能会增加.(有时它运行时少于450,可能是100或20)
对我来说更好:
使用n作为增加的数量(不是实际的复杂性)我是,将它设置为低于预期n = 440或者某些东西将给我"复杂性"n + 2n =(3n)
而如果我把它略高于(n = 460)就会给出n
另外,如果我设置n = 800给我一个高n(几乎2n)(高但我然后使用TrimToSize使其更好?
什么是最好的选择?
我会说实话,我对所有关于n的讨论都进行了掩饰,因为我认为它会降低真实点,即相对效率.
"最佳选择"是使用System.Collections.Generic.List<T>,将其初始化为合理的东西,然后在分析告诉您这是一个问题之前不要担心它.
使用通用列表可以为您提供强大的键入支持,并且使用值类型可以避免装箱问题.
如果列表大小不断变化,或者列表不能存活很长时间,修剪它将不会提供太多改进(如果有的话).如果您了解所涉及的大小的某些内容,则可以使用具有初始容量的重载构造函数来保存一些重新分配:
var list = new List<int>(450);
Run Code Online (Sandbox Code Playgroud)
在初始容量被命中后,列表将继续使用它自己的内部逻辑调整大小来决定要抓取多少(默认情况下,如果你没有指定一个大小就是加倍大小:从4开始,然后是8,16 ,32等).