哪一个更快List <t>或ArrayList <t>?</t> </t>

时间:2011-03-09 19:50:05

标签: c# .net generics

  

可能重复:
  .NET: ArrayList vs List

您好,

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

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

非常感谢, 摩尼

3 个答案:

答案 0 :(得分:13)

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

你应该使用List<T>而不是ArrayList,因为它没有全部装箱\解拳。

答案 1 :(得分: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();
    }

在我的比赛中,List<int>花了13毫秒,List<object>花了69毫秒,ArrayList花了40毫秒。

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

编辑:测试插入效果,List<int>花了255毫秒,List<object>花了723毫秒,ArrayList花了397毫秒。带有拳击的ArrayList 几乎与没有装箱的List相同!

答案 2 :(得分:2)

我猜它取决于你,你在谈论查找,插入等吗?