可能重复:
.NET:ArrayList vs List
你好,
我在网上搜索并发现我的冲突答案,到目前为止还不清楚,哪一个更快List<T> or ArrayList<T>,是什么原因?
我猜测List<T>应该更快但不确定,因为在这种特定情况下甚至ArrayList<T>也被标记为通用类型.
非常感谢,Mani
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相提并论!
| 归档时间: |
|
| 查看次数: |
16606 次 |
| 最近记录: |