什么是集合:集合就是一种存放多个数据的容器类型,比如最简单的集合:数组Array(完整的类型是System.Array)。
为什么需要集合:集合比数组更加强大,集合实现了更加丰富的功能,可以提高开发效率。
本篇博客介绍以下几种常用集合:
优点:初始化时可以不指定长度,可以使用Count属性获取长度,随时添加Add、删除Remove,RemoveAt,访问通过索引[index]。
缺点:比数组耗费更多内存,读取速度比数组慢,ArrayList是非泛型集合,里面放的是object类,需要执行装箱拆箱操作,有性能损耗。
菜鸟教程:https://www.runoob.com/csharp/csharp-arraylist.html
为避免动态数组ArrayList装箱和拆箱的问题,通常使用List<T>泛型来指定特定的类型,以减少性能损耗。
using System;
using System.Collections.Generic;
using System.Linq;
namespace Test
{
class Program
{
static void Main(string[] args)
{
List<Student> stuList = new List<Student>();
stuList.Add(new Student("A"));//添加元素
stuList.Add(new Student("B"));
stuList.Add(new Student("C"));
stuList.Add(new Student("D"));
var a = stuList.FirstOrDefault(t => t.name == "A");
stuList.Remove(a);//移除指定元素
stuList.RemoveAt(0);//根据索引移除元素
Console.WriteLine(stuList.Contains(new Student("A")));//判断元素是否在list中
for (int i = 0; i < stuList.Count; i++)//获取list的长度
{
stuList[i].PrintName();//根据索引访问
}
stuList.Clear();//移除所有元素
}
}
public class Student
{
public string name;
public Student(string name)
{
this.name = name;
}
public void PrintName()
{
Console.WriteLine("i am a student my name is:" + name);
}
}
}
输出结果:

键值对类型安全,没有装箱和拆箱的性能损耗,查询等操作速度快,单线程中推荐使用 Dictionary,有泛型又是,且读取速度快,容量利用更充分。对键值对的操作具体可看我的另一篇博客:https://www.cnblogs.com/gygg/p/11609166.html
栈是一种先进后出,后进先出的对象集合,好比是只有一个开口的羽毛球筒,最先放进去的球,是最后一个拿出来的。
栈的常用方法:
入栈 Push()
出栈 Pop()
获取栈顶对象 Peek()
图解:

using System;
using System.Collections;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Stack st = new Stack();
//入栈
st.Push(‘A‘);
st.Push(‘B‘);
st.Push(‘C‘);
st.Push(‘D‘);
Console.Write("Current stack: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
Console.WriteLine();
//再次添加对象
st.Push(‘E‘);
st.Push(‘F‘);
//输出顶栈对象
Console.WriteLine("The next poppable value in stack: {0}",st.Peek());
Console.Write("Current stack: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
Console.WriteLine();
Console.WriteLine("Removing values ");
//出栈
st.Pop();
st.Pop();
st.Pop();
Console.Write("Current stack: ");
foreach (char c in st)
{
Console.Write(c + " ");
}
}
}
}
输出结果:

队列是一种先进先出的对象集合,类似两端开口的羽毛球筒,先放进去的,重另一端先拿出来。
队列的常用方法
出队 Dequeue()
入队 Enqueue()
图解:

using System;
using System.Collections;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Queue q = new Queue();
//入队
q.Enqueue(‘A‘);
q.Enqueue(‘B‘);
q.Enqueue(‘C‘);
q.Enqueue(‘D‘);
Console.Write("Current queue: ");
foreach (char c in q)
{
Console.Write(c + " ");
};
Console.WriteLine();
//再次添加对象
q.Enqueue(‘E‘);
q.Enqueue(‘F‘);
Console.Write("Current queue: ");
foreach (char c in q)
{
Console.Write(c + " ");
};
Console.WriteLine();
Console.WriteLine("Removing some values ");
//出队
char ch = (char)q.Dequeue();
Console.WriteLine("The removed value: {0}", ch);
ch = (char)q.Dequeue();
Console.WriteLine("The removed value: {0}", ch);
Console.ReadKey();
}
}
}
输出结果:

End!
原文:https://www.cnblogs.com/gygg/p/13355986.html