先来看下普通的数据是怎么样使用的:
Stopwatch sw = new Stopwatch();
sw.Start();
int[] shop = new int[10000];
for (int i = 0; i < 10000; i++)
{
shop[i] = 1;
}
for (int i = 0; i < 10000; i++)
{
Console.WriteLine(shop[i]);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds+"毫秒!");
使用普通数组存储和读取1W条数据 使用了450毫秒!
看下ArrayList 如:先ArrayList添加1万条数据
Stopwatch sw = new Stopwatch();
sw.Start();
ArrayList list = new ArrayList();
for (int i = 0; i < 10000; i++)
{
Student stu = new Student() { Name = "张三" + (i + 1) };
list.Add(stu);
}
foreach (Student item in list)
{
Console.WriteLine(item.Name);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds+"毫秒!");
能看到我们创建了一个ArrayList 先里面添加了1万条对象数据,用了379毫秒!ArrayList是通过下标来获取值,所以他的效率会快安全是不安全!
如下:
ArrayList list = new ArrayList();
list.Add("你好!");
list.Add(123);
foreach (var item in list)
{
Console.WriteLine(item);
}
在这里我们可以看到,我们先ArrayList添加一个字符串和数字类型。 所以我们可以得出结果,ArrayList不安全。因为ArrayList添加的类型可以是Object 任何类型!他读取出来的时候不知道是什么类型,所以只能通过foreach var或者Object类型遍历出来,如果我们添加的是多个不同的对象,我们想要去遍历他会觉得很麻烦!但是他比普通的数组强很多,他可以使用自身的方法ArrayList.RemoveAt(下标)进行删除,在删除之后 这个空位 后面的下标自动往前进!
让我们看下Hashtable
在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.
Stopwatch sw = new Stopwatch();
sw.Start();
Hashtable hashtable = new Hashtable();
for (int i = 0; i < 10000; i++)
{
Student stu = new Student() { Id = i, Name = "张三" + (i + 1) };
hashtable.Add(stu.Id, stu);
}
foreach (Student item in hashtable.Values)
{
Console.WriteLine(item.Id);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds+"毫秒!");
这里能看到使用Hashtable 存储1W条数据使用了484毫秒!
我们在次使用List<T> 存储1W条数据 在输出!
Stopwatch sw = new Stopwatch();
sw.Start();
List<Student> list = new List<Student> ();
for (int i = 0; i < 10000; i++)
{
Student stu = new Student() { Id = i, Name = "张三" + (i + 1) };
list.Add(stu);
}
foreach (Student item in list)
{
Console.WriteLine(item.Id);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds+"毫秒!");
使用List<T>泛型集合 存储1W条数据还读取 使用了420毫秒!
再次使用Dictionary<K、V>测试!
Stopwatch sw = new Stopwatch();
sw.Start();
Dictionary<int,Student> pairs = new Dictionary<int, Student>();
for (int i = 0; i < 10000; i++)
{
Student stu = new Student() { Id = i, Name = "张三" + (i + 1) };
pairs.Add(stu.Id,stu);
}
foreach (Student item in pairs.Values)
{
Console.WriteLine(item.Id);
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds+"毫秒!");
使用Dictionary<K、V>泛型集合 存储1W条数据还读取 使用了479毫秒!
总结 使用ArrayList 存储和读取的总时间较快!
如果想要数据安全性可以使用List<T>!!!!!