可能重复:
.NET: ArrayList vs List
您好,
我在网上搜索并发现我的冲突答案,到目前为止还不清楚,
哪一个更快List<T> or ArrayList<T>
,原因是什么?
我猜List<T>
应该更快但不确定,因为在这种特定情况下,即使ArrayList<T>
也被标记为通用类型。
非常感谢, 摩尼
答案 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)
我猜它取决于你,你在谈论查找,插入等吗?