0%

【C#】集合

C#中存在多种集合形式,其中主要分为偏向数据存取效率的集合与偏向数据存取方式的集合。

具体如下: 偏向数据存取效率:Arrays(数组)、ArrayList(动态数组)、List(列表)、Dictionary(字典) 偏向数据存取方式:Stack(栈)、Queue(队列)

①数组(Array)

数组我们早已熟悉,其方便之处就在于可以定义多维数组,且赋值和调用时无需装箱拆箱,效率高。缺点就是静态定义,定义时必须确定元素类型(定义成Object类型后也可以存储多种类型,但是需要装箱与拆箱)、后期无法增减元素

②动态数组(ArrayList)

动态数组与数组的优缺点正好相反:优点是后期可以增减元素、定义时无需确定元素类型,所以理论上同一个动态数组可以包括不同的类型。但缺点是不能定义多维数组、赋值和调用时必须装箱和拆箱,效率低下。 定义方法:

ArrayList array=new ArrayList();

添加元素时,使用Add方法:

array.Add(new Dog());
array.Add(3);
array.Add(new string[3]);

移除元素时,使用Remove方法,也可以使用RemoveAt方法按照索引移除元素:

array.Remove(3)//移除元素3
array.RemoveAt(0)//移除第一个元素
array.Count//返回当前数组的元素数量

后面的列表、字典也以这种方式添加、删除元素。

③列表(List)与字典(Dictionary)

列表和字典使用泛型确定元素类型,故与动态数组相比继承了其后期可增减的优势,还有不需要装、拆箱的效率优势,所以如无特殊需要,可用List替代动态数组。字典与列表相比,其索引也可以是泛型。具体介绍见之前的文章:【C#】List、Dictionary以及两种筛选算法

④栈(Stack)

栈是使用先入后出的元素读取形式。其使用泛型确定元素类型,我们不能具体调用栈中的某个元素,只可以访问栈中的首元素,也就是最后一个放进栈中的元素。(可以使用ToArray()将栈转为一个数组,如此即可对其中的某个元素进行操作) 定义:

Stack stack=new Stack();

向栈中添加元素(Push):

stack.Push(T t);

返回栈的首元素(最后放入的)(Peek):

T t=stack.Peek();

删除栈的首元素,并将其返回(Pop):

T t=stack.Pop();

既可使用Count()方法返回栈的元素数量,也可以读取Length属性得到栈的元素数量:

int num1=stack.Count();
int num2=stack.Length;

⑤队列(Queue)

队列使用先进先出的元素读取形式,与栈相同:其使用泛型确定元素类型,我们不能具体调用队列中的某个元素,只可以访问队列中的首元素。但与栈不同的是,这里的首元素指的是第一个放进队列中的元素。(可以使用ToArray()将队列转为一个数组,如此即可对其中的某个元素进行操作) 定义:

Queue queue=new Queue();

向队列中添加元素(Enqueue):

queue.Enqueue(T t);

返回队列的首元素(最先放入的)(Peek):

T t=queue.Peek();

删除队列的首元素,并将其返回(Dequeue):

T t=stack.Dequeue();

与栈相同,既可使用Count()方法返回队列的元素数量,也可以读取Length属性得到元素的元素数量:

int num1=queue.Count();
int num2=queue.Length;