最近無聊,對比了一下幾種容器控件,也記錄一下,下次自已好提醒下,現(xiàn)在內(nèi)存這么便宜,還是提倡是使用哈希表,而LIST<>集合也不錯,但學(xué)是慢了
測試數(shù)據(jù)第一次為一W條,第二次為十W條,
時間是以微秒計,如以下這樣記數(shù)
long StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
arr.Add(i);
}
long EndTime = DateTime.Now.Ticks;
Console.WriteLine("ArryList添加執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
hs.Add(i, "我是" + i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("Hashtable添加執(zhí)行時間:" + (EndTime - StartTime));
數(shù)據(jù)為1W條的時候
yellowyu
ArryList添加執(zhí)行時間: 0
Hashtable添加執(zhí)行時間: 156250
List添加執(zhí)行時間: 0
數(shù)組添加執(zhí)行時間: 0
ArryList查找執(zhí)行時間: 7968750
Hashtable查找執(zhí)行時間: 0
List查找執(zhí)行時間: 3906250
數(shù)組查找執(zhí)行時間: 3906250
ArryList刪除執(zhí)行時間: 937500
Hashtable刪除執(zhí)行時間: 0
List刪除執(zhí)行時間: 468750
而這時候的速度還可以原諒,畢竟7968750微秒還可以忍受,這是測一W條數(shù)據(jù)的時候,但當(dāng)你把數(shù)據(jù)提升到十W條的時候,下面的數(shù)據(jù)你就知道無法忍受了
而添加時,肯定是哈希表是最花時間的,因為要建這么一張索引表,還有分配那部分空間
但是查找上,哈希表是最快的,LIST第二,數(shù)組的順序查找,也算是比較慢的查找,跟LIST差不多,如果折半可能會快三倍到五倍吧,而ARRAYLIST是最慢的
在刪除上,不明白為什么時間比查找還要少,有明白的幫忙講下,嘿嘿
而當(dāng)把數(shù)據(jù)查找提到十W條的時候
數(shù)據(jù)是以下這樣的
yellowyu
ArryList添加執(zhí)行時間: 156250
Hashtable添加執(zhí)行時間: 1093750
List添加執(zhí)行時間: 0
數(shù)組添加執(zhí)行時間: 0
ArryList查找執(zhí)行時間: 823125000
Hashtable查找執(zhí)行時間: 156250
List查找執(zhí)行時間: 430781250
數(shù)組查找執(zhí)行時間: 394062500
ArryList刪除執(zhí)行時間: 124843750
Hashtable刪除執(zhí)行時間: 0
List刪除執(zhí)行時間: 53125000
我想誰也忍受不了那個程序運(yùn)行個查找要823125000微秒吧,太變態(tài)了吧
在需要大量查找時,我更喜歡用HASH表,而LIST集合由于保存著值類型,使用起來相當(dāng)方便,也是比較喜歡的,我討厭死Arraylist了
大家可是在自已的機(jī)子上試試,我的本本是雙核1.6
程序代碼是:
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("yellowyu");
Console.ReadLine();
int i;
System.Collections.Hashtable hs = new System.Collections.Hashtable();
System.Collections.ArrayList arr = new System.Collections.ArrayList();
List<int> IntList = new List<int>();
int[] a = new int[100000];
long StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
arr.Add(i);
}
long EndTime = DateTime.Now.Ticks;
Console.WriteLine("ArryList添加執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
hs.Add(i, "我是" + i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("Hashtable添加執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
IntList.Add(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("List添加執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
a[i] = i;
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("數(shù)組添加執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
arr.Contains(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("ArryList查找執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
hs.Contains(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("Hashtable查找執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
IntList.Contains(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("List查找執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
for (int q = 0; q < 100000; q++)
{
if (i == a[q])
{
break;
}
}
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("數(shù)組查找執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
arr.Remove(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("ArryList刪除執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
hs.Remove(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("Hashtable刪除執(zhí)行時間:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
IntList.Remove(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("List刪除執(zhí)行時間:" + (EndTime - StartTime));
Console.ReadLine();
}
}
}