哪一个更有效:List <int>或int []

Tar*_*rik 27 c# list

谁能告诉我,哪一个是之间更有效的List<int>int[].因为我正在研究一个项目,你可能知道效率是如此重要的关注点.

如果您在帖子中添加了一些介绍性说明,那就太棒了:)

Sam*_*ell 81

(list should be resizable) ? List<int> : int[]
Run Code Online (Sandbox Code Playgroud)

List<int>int[]根据需要调整大小的包装器.随着JIT内联,他们应该执行几乎相同,但JIT将有一个更简单的时间险胜从额外的性能int[],因为它的原始专用IL指令的CLI.


Cyb*_*ist 13

只是为了它的乐趣,我跑了这个:

int cap = 100000;

Stopwatch sw1 = new Stopwatch();
sw1.Start();

int[] ix = new int[cap];
for (int x = 0; x < cap; x++)
{
    ix[x] = 1;
}

sw1.Stop();

Stopwatch sw2 = new Stopwatch();
sw2.Start();
List<int> iy = new List<int>(cap);
for (int y = 0; y < cap; y++)
{
    iy.Add(y);
}
sw2.Stop();

Console.WriteLine(cap.ToString() + "     int[]=" + sw1.ElapsedTicks.ToString());
Console.WriteLine(cap.ToString() + " List<int>=" + sw2.ElapsedTicks.ToString());

Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)

得到了这个:

100000 int[]=1796542
100000 List=2517922

我在经过的毫秒中尝试了它,分别得到0和1.显然int []的速度更快,但除非你说的是大型数组,否则我认为它只是名义上的.

  • @orj,怎么会"毫无意义".做你说的话可能更有意义,但它几乎没有意义.苛刻你,而不是一点都没有.此外,在发布此回复之前,您认为我运行了多少次?它不仅仅是一次,所发布的结果是所有运行的典型结果.我没有打扰它们的平均值,但似乎没有必要进行"全面"基准测试. (5认同)
  • @overstood:整数没有装箱/拆箱.如果泛型参数`T`是一个值类型,那么`T []`将是一个值数组,而不是一个盒装值数组. (5认同)
  • @guardi:他确实为该名单设定了容量.List <int> iy = new List <int>(cap).根据我的经验,int []要快得多. (4认同)

Dan*_*Tao 9

如果您确切地知道集合中将有多少元素,并且不需要List<int>AND的任何额外功能(这是一个非常严重的AND),那么性能是一个严重的问题,请继续使用int[].否则坚持下去List<int>.

  • 当使用`T []`时,大多数`List <T>的特性都可以作为`Array`类的静态成员使用.如果列表是固定大小,则使用`T []`,因为它们都是`IList <T>`. (3认同)

Edw*_*Tai 7

后者更有效.
在源代码中,List<>由一些数组命名.
例如,List<Type> aa=new List<Type>();
通常,array Type[]声明a,它的长度是一定数量.换句话说,如果你宣布a List<>,已经使用了一个很大的空间.
如果List<>'s元素超出长度,则应将数组复制到另一个更大的数组.所以,最好不要使用List<>.
更好的使用方法是声明它的长度.
名单aa=new List<Type>(10);

  • 你的英语可能很差,但没有理由拒绝你的答案.这个网站上确实存在无法判断的混蛋,如果他们无法按照你所写的内容进行操作,那么他们应该让它保持不受控制.为了善意,我碰到了你.和平. (3认同)

Sha*_*awn 6

List在内部使用数组,因此使用数组(正确)将始终更多(或至少)有效.