C#的集合类型及使用技巧

时间:2021-08-19 18:01:26

在日常开发过程中,我们不能避免的要对批量数据处理,这时候就要用到集合。集合总体上分为线性集合和非线性集合。线性集合是指元素具有唯一的前驱和后驱的数据结构类型;非线性集合是指有多个前驱和后驱的数据结构类型,如树和图。我们这里主要讲常用的线性集合,常用的线性集合有数组、ArrayList、List、Hashtable(哈希表)、Dictionary(字典)、Stack(堆栈集合)、Queue(队列集合)等。
一、数组
数组是一个存储相同类型元素的固定大小的顺序集合。数组属于引用类型,它继承System.Array类,System.Array是所有数组的基类。
1、一维数组
一维数组声明方式:

//声明一个长度为5的int类型一维数组 int[] numbers = new int[5];

一维数组的初始化方式有以下三种写法:

//一维数组的初始化方式 int[] numbers1 = new int[5] {1,2,3,4,5};//指定大小和元素,使用条件是数组大小必须与元素个数相匹配。 int[] numbers2 = new int[] {1,2,3,4,5};//不指定数组大小,因为编译器会自动统计元素的个数。 int[] numbers3 = { 1, 2, 3, 4, 5 };//这是更简化的形式,直接使用花括号声明和初始化数组。

访问数组元素:
在声明和初始化数组后,就可以使用索引器访问其中的元素了,数组只支持有整型参数的索引器。索引器总是以0开头,表示第一个元素。注意:如果使用错误的索引器值(其中不存在对应的元素),就会抛出IndexOutOfRangeExcepation类型的异常。

int[] numbers1 = new int[5] {1,2,3,4,5}; int value1 = numbers1[0];//获取数组的第一个元素。

如果要循环遍历数组中的元素,可以使用for循环,也可以使用foreach来遍历数组中的元素,两者的区别在于:foreach循环对数组内容进行只读访问,所以不能改变任何元素的值,但是for循环可以给数组元素赋值。
2、多维数组
多维数组包含二维数组、三维数组等等。我们这里以二维数组为例。
二维数组声明方式:

//二维数组的声明方式, string[,] names = new string[5, 4];

二维数组初始化方式:

//二维数组的初始化方式 string[,] names1 = { { "a", "b" }, { "c", "d" } };

3、数组的数组
数组的数组声明方式:

//数组的数组声明方式 byte[][] scores = new byte[5][];

数组的数组初始化方式:

//数组的数组的初始化方式 int[][] scores1 = { new int[]{1,2},new int[]{1,2,3,4}};

多维数组与数组的数组的差别:多维数组每行长度一致,是固定的;但是数组的数组每行长度是可以不固定。数组在内存中是连续存储的,所以它的索引速度非常快,但也正因为数组在内存中是连续存储的,造成数组必须在声明时指定大小,那么如果声明时数组长度太长,则导致内存浪费;长度太短又会造成数据溢出错误。另外,因为空间连续,插入和删除元素效率比较低,而且麻烦。


二、集合ArrayList和List
1、ArrayList
ArrayList是System.Collections命名空间中定义的非泛型类型的集合。它用于创建动态数组意味着数组的大小根据程序的要求自动增加或减少,不需要指定ArrayList的大小。因为ArrayList是非泛型类型的集合,所以ArrayList既能存储相同类型的元素,也能存储不同类型的元素,故ArrayList不能保证类型安全。
注意:ArrayList的使用需要引入System.Collections命名空间。
ArrayList常用方法: