C#学习笔记 常用的集合

本文介绍了C#中常见的几种集合类型,包括List<T>、Queue<T>、Stack<T>、LinkedList<T>、SortedList<TKey,TValue>、Dictionary<TKey,TValue>和ISet<T>。详细讲解了它们的特点、接口实现、常用方法以及操作示例,帮助读者深入理解C#集合的使用。" 115606165,7198846,C系列教程:数据类型、运算符与控制流解析,"['C语言', '数据类型', '运算符', '控制流']

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

列表List< T>

列表List< T>实现了IList、ICollection、IEnumberable、IList接口。可以向该列表中动态的添加、删除、查找元素。如果列表中的元素满了,会动态分配一个容量是原来两倍的列表。为了避免多次重新分配内存带来的系统开销,如果事先知道所使用的列表的最大值,可以为列表预先分配足够的容量。

使用Capacity属性读取和设置容量。如果不需要添加元素,可以使用TrimExcess()方法,去掉不需要的容量。

可以使用一个已有的数组初始化列表,或者也可以使用初始值设定语法。

 int[] array = { 1, 2, 3, 4, 5 };
 List<int> list = new List<int>();
 //或者直接List<int> list = new List<int>(){ 1, 2, 3, 4, 5 };

添加元素使用Add()方法。也可以使用AddRange()方法一次性添加多个元素。

插入元素使用Insert()方法。也可以使用InsertRange()方法一次性插入多个元素。

列表实现了IList接口,而IList接口中实现了索引器。因此列表可以直接使用索引器访问元素,就像数组一样。

可以用Count属性查看列表有多少个元素。

还可以利用ForEach()方法对集合中的每一项执行一些操作。该方法的参数是一个委托:Action< T> action。例如,输出列表中的每一个数字。

static void Main(string[] args)
{
    int[] array = { 1, 2, 3, 4, 5 };
    List<int> list = new List<int>(array);
    list.ForEach(e => Console.WriteLine(e));
}

删除元素使用RemoveAt()方法,既可以传递下标删除指定索引处的元素,也可以传递要删除的元素。但是一般情况下前者要更高效一点,因为后者需要先定位元素然后才能删除。还可以利用RemoveRange()方法一次性删除多个元素。

常用的查找方法有IndexOf()、LastIndexOf()、FindIndex()、FindLastIndex()、Find()、FindLast()。可以使用Exists()方法查看某元素是否在集合中存在。

排序可以使用Sort()方法。重载的Sort()方法可以添加一个比较器, 以实现自定义排序。

可以使用ConvertAll()方法,将一种类型的列表转换为另外一种类型的列表。

队列Queue< T>

队列也就是先进先出(FIFO)的列表,队列实现了ICollection和IEnumberable< T>接口,但是没有实现ICollection< T>接口,因此没有Add()和Remove()方法。也没有实现IList< T>接口,因此不能使用索引器访问。

队列常用的方法和属性如下:

方法或属性说明
Count返回队列的元素个数
Enqueue该方法在队列末尾添加一个元素
Dequeue该方法返回并删除队列头的元素
Peek该方法仅返回队列头元素,不删除元素
TrimExcess该方法重新设置队列的容量,去除未使用空间

栈Stack< T>

栈和队列类似,不过是后进先出(LIFO)的列表。常用的方法或属性如下:

方法或属性说明
Count返回栈中元素的个数
Push将一个元素入栈
Pop将一个元素出栈并返回
Peek返回栈顶元素但不删除
Contains判断某个元素是否在栈中

双向链表 LinkedList< T>

前面的列表List是用数组实现的。在随机访问和想末尾添加元素时比较快。这里的链表则是在链表中间插入元素比较快。

具体方法和列表差不多。详细方法可以查看MSDN。

有序列表SortedList< TKey,TValue>

该集合存储键值对,并按键排序。注意每个键只能对应一个值。而且如果要访问的键不存在,就会抛出异常。因此可以使用Contain()方法先判断是否存在某键或者是用TryGetValue()方法尝试获取值,这样就不会发生异常。

字典Dictionary< TKey,TValue>

字典类存储键值对,内部使用散列法实现,主要用来实现键值对的高效查找。用作键的类型需要重写GetHashCode()和Equals()方法,避免在执行散列函数时出现意外情况。

集合ISet< T>

集合表示没有重复内容的Collection。常用的有无序集合HashSet< T>和有序集合SortedSet< T>。集合含有一些方法可以进行集合的交、并、差等运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值