一、前言:

  在c#数据结构中,集合的应用非常广泛,无论是做BS架构还是CS架构开发,都离不开集合的使用,比如我们常见的集合包括:Array、ArrayList、List、LinkedList等。这一些数据集合,在功能上都能够实现集合的存取,但是他们内部有什么区别,在使用时需要注意一些什么呢?下面根据个人的经验,对这一些集合数据的使用做一个简单的小结,如果说的不对的地方,欢迎指出,多多交流改进。

二、Array集合简介

  Array集合,也就是数组,是最简单的数据结构,其存储的数据在内存空间是连续的,数组有一下一些特点

  • 1.数据存储是连续的
  • 2.数组长度在定义时就必须制定
  • 3.数组存储的数据类型都是同一类型
  • 4.数组可以直接通过小标访问

  优缺点:
   优点:
1、可以根据索引直接访问,访问速度快
   2、数据是安全的,由于数据类型一致性,在存储使用过程中不涉及
缺点:
 1、由于数据是连续存储的,导致插入效率变慢
    2、由于数组长度大小固定,那么对预期非固定长度的数字不好处理

  练习实例代码:

 

复制代码
    /// <summary>    /// 数组练习操作      /// </summary>    public class ArrayTest     {         /// 数组 Array 对于大家来说一点都不陌生         /// 数组是在内存连续分配的存储空间,这也导致数组有一下一些特点         /// 1.数据存储是连续的         /// 2.数组长度在定义时就必须制定         /// 3.数组存储的数据类型都是同一类型         /// 4.数组可以直接通过小标访问         ///         /// 优缺点:         /// 优点:         ///     1、可以根据索引直接访问,访问速度快         ///     2、数据是安全的,由于数据类型一致性,在存储使用过程中不涉及到装箱拆箱操作         /// 缺点:         ///     1、由于数据是连续存储的,导致插入效率变慢         ///     2、由于数组长度大小固定,那么对预期非固定长度的数字不好处理          /// int类型的数组操作         public static void IntArrayTest()         {              //// 定义一个秒表,执行获取执行时间            Stopwatch st = new Stopwatch();//实例化类            st.Start();//开始计时             Console.WriteLine("开始初始化长度为10000000的int数组:");              //// 定义一个数组            int[] nums = new int[10000000];             for (int i = 0; i < 10000000; i++)             {                 nums[i] = 1 + 1;             }              //需要统计时间的代码段             st.Stop();//终止计时            Console.WriteLine(string.Format("初始化长度为10000的int数组完毕!总耗时{0}毫秒", st.ElapsedMilliseconds.ToString()));         }     }
复制代码

 

三、ArrayList集合简介

ArrayList 是Array的升级版,能够解决Array的一些缺点
ArrayList其内部实现也是Array,只是其长度是可以动态,在其内部用一个变量记录控制长度,ArrayList有如下一些特点

  • 1.长度不固定
  • 2.可以存储不同的数据类型(object)
  • 3.同样支持索引查询(可以直接通过小标访问)
  • 4.灵活性更强,以牺牲性能为代价

优缺点:
优点:
1、长度不固定,在定义是不必担长度溢出
2、可以存储任意数据类型
3、可根据索引查询,查询效率快
缺点:
1、由于长度不固定,执行效率低下,因为超出默认长度(10)后,会自动扩容拷贝数据,牺牲性能
2、由于存储类型是object,所以在存数据时会有装箱操作,在取数据时会有拆箱操作,影响效率
3、线程不安全,因为其内部实现是用size、array来共同控制,在新增操作时是非原子操作,所以非安全线程

使用技巧:
在实际使用过程中,为了避免自动扩容,可以预估数据长度,初始化一个数据长度,从而提高效率

练习实例代码: