ArrayList容量,哪个更好?C#

Vik*_*ren 0 c# arraylist capacity

我今天的输入大约是450,未来可能会增加.(有时它运行时少于450,可能是100或20)

对我来说更好:

  • 没有设定容量
  • 设定容量低(100)
  • 设定容量低于450
  • 设定容量超过450
  • 将容量设定在450以上
  • 将容量设置为高于预期的容量(多80%?,两次?)

使用n作为增加的数量(不是实际的复杂性)我是,将它设置为低于预期n = 440或者某些东西将给我"复杂性"n + 2n =(3n)

而如果我把它略高于(n = 460)就会给出n

另外,如果我设置n = 800给我一个高n(几乎2n)(高但我然后使用TrimToSize使其更好?

什么是最好的选择?

Ada*_*rth 6

我会说实话,我对所有关于n的讨论都进行了掩饰,因为我认为它会降低真实点,即相对效率.

"最佳选择"是使用System.Collections.Generic.List<T>,将其初始化为合理的东西,然后分析告诉您这是一个问题之前不要担心它.

使用通用列表可以为您提供强大的键入支持,并且使用值类型可以避免装箱问题.

如果列表大小不断变化,或者列表不能存活很长时间,修剪它将不会提供太多改进(如果有的话).如果您了解所涉及的大小的某些内容,则可以使用具有初始容量的重载构造函数来保存一些重新分配:

var list = new List<int>(450);
Run Code Online (Sandbox Code Playgroud)

在初始容量被命中后,列表将继续使用它自己的内部逻辑调整大小来决定要抓取多少(默认情况下,如果你没有指定一个大小就是加倍大小:从4开始,然后是8,16 ,32等).