C#学习笔记 常用的集合

2022-05-05 18:34:51 浏览数 (1)

列表List< T>

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

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

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

代码语言:javascript复制
 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。例如,输出列表中的每一个数字。

代码语言:javascript复制
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>。集合含有一些方法可以进行集合的交、并、差等运算。

0 人点赞