Which one is more efficient : List or int[]

后端 未结 6 1131
伪装坚强ぢ
伪装坚强ぢ 2020-12-09 08:30

Can someone tell me which one is more efficient between List and int[]. Because I am working on a project and as you might know efficien

相关标签:
6条回答
  • 2020-12-09 08:45

    If you plan on using any features that a list would provide (searching, sorting, removing, resizing) then I would go with a list because chances are these functions are very optimized already and you won't be able to write better versions of them.

    0 讨论(0)
  • 2020-12-09 08:49

    the latter is more effective.
    In the source code, List<> is named by some Arrays.
    Eg, List<Type> aa=new List<Type>();
    In general, an array Type[] is declared, the length of it is a certain number. In another word, if you declare a List<>, a big space has already used.
    If the List<>'s element is out of length, the array should be copied to another bigger one. So, it is better not to use List<>.
    The better way to use is to declared the length of it.
    List aa=new List<Type>(10);

    0 讨论(0)
  • 2020-12-09 08:53
    (list should be resizable) ? List<int> : int[]
    

    List<int> is a wrapper for int[] that resizes as needed. With JIT inlining, they should perform almost identically, but the JIT will have an easier time edging out the extra performance from int[] because it's a CLI primitive with dedicated IL instructions.

    0 讨论(0)
  • 2020-12-09 09:03

    List uses an array internally, so using an array (correctly) would always be more (or atleast as) efficient.

    0 讨论(0)
  • 2020-12-09 09:08

    If you know exactly how many elements are going to be in the collection and don't need any of the extra features of List<int> AND (that is a very serious AND) performance is a serious concern, go with int[]. Otherwise stick with List<int>.

    0 讨论(0)
  • 2020-12-09 09:09

    Just for the fun of it, I ran this:

    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();
    

    And got this:

    100000 int[]=1796542
    100000 List=2517922
    

    I tried it in elapsed milliseconds and got 0 and 1 respectively. Clearly the int[] is way faster, but unless you're talking huge arrays, I'd say it is just nominal.

    0 讨论(0)
提交回复
热议问题