哪一个更快List <T>或ArrayList <T>?

Eve*_*ers 2 .net c# generics

可能重复:
.NET:ArrayList vs List

你好,

我在网上搜索并发现我的冲突答案,到目前为止还不清楚,哪一个更快List<T> or ArrayList<T>,是什么原因?

我猜测List<T>应该更快但不确定,因为在这种特定情况下甚至ArrayList<T>也被标记为通用类型.

非常感谢,Mani

CD.*_*D.. 13

我想你的意思List<T>ArrayList.

你应该使用List<T>而不是ArrayList因为它没有所有的拳击\解拳.


Han*_*esh 10

我为你做了这个.

   static void Main(string[] args)
    {
        Stopwatch sw = new Stopwatch();
        Console.WriteLine("Adding a million 32bit integers");

        sw.Start();
        List<int> listA = new List<int>();
        for(int i = 0; i < 1000000; i++)
        {
            listA.Add(i);
        }
        sw.Stop();
        Console.WriteLine("List<int> took {0} ms", sw.ElapsedMilliseconds);
        sw.Reset();

        sw.Start();
        List<object> listB = new List<object>();
        for (int i = 0; i < 1000000; i++)
        {
            listB.Add(i);
        }
        sw.Stop();
        Console.WriteLine("List<object> took {0} ms", sw.ElapsedMilliseconds);
        sw.Reset();

        sw.Start();
        ArrayList listC = new ArrayList();
        for(int i = 0; i < 1000000; i++)
        {
            listC.Add(i);
        }
        sw.Stop();
        Console.WriteLine("ArrayList took {0} ms", sw.ElapsedMilliseconds);
        sw.Reset();

        Console.WriteLine("\n Inserting 1000 values");
        //Gen list of random numbers
        Random rand = new Random(12345);
        int[] insertlocs = new int[1000];
        for (int i = 0; i < insertlocs.Length; i++)
            insertlocs[i] = rand.Next(1, 999999);

        sw.Start();
        for (int i = 0; i < insertlocs.Length; i++)
        {
            listA.Insert(insertlocs[i], i);
        }
        sw.Stop();
        Console.WriteLine("List<int> took {0} ms", sw.ElapsedMilliseconds);
        sw.Reset();

        sw.Start();
        for (int i = 0; i < insertlocs.Length; i++)
        {
            listB.Insert(insertlocs[i], i);
        }
        sw.Stop();
        Console.WriteLine("List<object> took {0} ms", sw.ElapsedMilliseconds);
        sw.Reset();

        sw.Start();
        for (int i = 0; i < insertlocs.Length; i++)
        {
            listC.Insert(insertlocs[i], i);
        }
        sw.Stop();
        Console.WriteLine("ArrayList took {0} ms", sw.ElapsedMilliseconds);
        sw.Reset();

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

在我的comp,List<int>花了13ms,List<object>花了69ms,ArrayList花了40ms.

所以你有它,对于引用类型ArrayList更快.但对于值类型,您显然应该使用List

编辑:测试插入性能,List<int>花了255ms,List<object>花了723ms,ArrayList花了397ms.带拳击的 ArrayList 几乎与没有拳击的List相提并论!