无聊对比了几种容器的操作:LIST<> ARRAYLIST HASH表,数组,嘿嘿
最近无聊,对比了一下几种容器控件,也记录一下,下次自已好提醒下,现在内存这么便宜,还是提倡是使用哈希表,而LIST<>集合也不错,但学是慢了
测试数据第一次为一W条,第二次为十W条,
时间是以微秒计,如以下这样记数
long StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
arr.Add(i);
}
long EndTime = DateTime.Now.Ticks;
Console.WriteLine("ArryList添加执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
hs.Add(i, "我是" + i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("Hashtable添加执行时间:" + (EndTime - StartTime));
数据为1W条的时候
yellowyu
ArryList添加执行时间: 0
Hashtable添加执行时间: 156250
List添加执行时间: 0
数组添加执行时间: 0
ArryList查找执行时间: 7968750
Hashtable查找执行时间: 0
List查找执行时间: 3906250
数组查找执行时间: 3906250
ArryList删除执行时间: 937500
Hashtable删除执行时间: 0
List删除执行时间: 468750
而这时候的速度还可以原谅,毕竟7968750微秒还可以忍受,这是测一W条数据的时候,但当你把数据提升到十W条的时候,下面的数据你就知道无法忍受了
而添加时,肯定是哈希表是最花时间的,因为要建这么一张索引表,还有分配那部分空间
但是查找上,哈希表是最快的,LIST第二,数组的顺序查找,也算是比较慢的查找,跟LIST差不多,如果折半可能会快三倍到五倍吧,而ARRAYLIST是最慢的
在删除上,不明白为什么时间比查找还要少,有明白的帮忙讲下,嘿嘿
而当把数据查找提到十W条的时候
数据是以下这样的
yellowyu
ArryList添加执行时间: 156250
Hashtable添加执行时间: 1093750
List添加执行时间: 0
数组添加执行时间: 0
ArryList查找执行时间: 823125000
Hashtable查找执行时间: 156250
List查找执行时间: 430781250
数组查找执行时间: 394062500
ArryList删除执行时间: 124843750
Hashtable删除执行时间: 0
List删除执行时间: 53125000
我想谁也忍受不了那个程序运行个查找要823125000微秒吧,太变态了吧
在需要大量查找时,我更喜欢用HASH表,而LIST集合由于保存着值类型,使用起来相当方便,也是比较喜欢的,我讨厌死Arraylist了
大家可是在自已的机子上试试,我的本本是双核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添加执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
hs.Add(i, "我是" + i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("Hashtable添加执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
IntList.Add(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("List添加执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
a[i] = i;
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("数组添加执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
arr.Contains(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("ArryList查找执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
hs.Contains(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("Hashtable查找执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
IntList.Contains(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("List查找执行时间:" + (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("数组查找执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
arr.Remove(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("ArryList删除执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
hs.Remove(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("Hashtable删除执行时间:" + (EndTime - StartTime));
StartTime = DateTime.Now.Ticks;
for (i = 0; i < 100000; i++)
{
IntList.Remove(i);
}
EndTime = DateTime.Now.Ticks;
Console.WriteLine("List删除执行时间:" + (EndTime - StartTime));
Console.ReadLine();
}
}
}