普通数组和集合效率谁更好又方便

本文通过实验对比了不同数据结构在存储和读取大量数据时的性能,包括数组、ArrayList、List<T>、Dictionary<K,V>和Hashtable。结果显示ArrayList在存储和读取方面表现出较高的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先来看下普通的数据是怎么样使用的:

            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>!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值