C#开发-集合使用和技巧
(一)常用集合和方法介绍常用集合和方法介绍
- C#开发-集合使用和技巧
- 1. 集合基础
- 集合介绍
- 集合跟数组对比
- 2.我们常用的集合类型
- 列表`List<T>`
- 键值对集合`Dictionary<TKey,TValue>`
- 队列`Queue<T>`
- 其他一些集合类型
- 堆栈`Stack<T>`
- 可观察集合`ObservableCollection<T> `
- 3. 集合常见的接口介绍
- `IEnumerable<T>` 和 `IEnumerator<T>`
- `ICollection<T>`
- `IList<T>`
1. 集合基础
集合介绍
集合是C#中用于存储和管理一组对象的数据结构。它们提供了比基本数据类型更灵活和强大的功能。集合可以动态调整大小,这意味着您不需要预先知道集合中将要存储多少元素。在C#中,集合通常指的是System.Collections
命名空间下的类,这些类允许您存储强类型的元素集合。
基本的集合都在System.Collections
命名空间中,该命名空间下面有几个命名空间,对集合进行分类
System.Collections.Generic
通用集合,包含用于定义泛型集合的接口和类,可允许用户创建强类型集合。例如:List<T>
、Dictionary<TKey, TValue>
等System.Collections.Concurrent
线程安全的集合类,提供几个线程安全的集合类,主要用于多个线程访问一个集合的情况,例如ConcurrentDictionary<TKey,TValue>
、ConcurrentQueue<T>
等System.Collections.ObjectModel
主要是一些集合的基类,不同功能类型集合的基类,例如:``Collection、
ObservableCollection`等
集合跟数组对比
- 数组 是固定大小的,一旦创建了数组,其大小就不能改变。它们在编译时就需要指定大小,并且元素必须是相同类型。
- 集合 的大小是动态的,可以根据需要增长或缩小。它们提供了更多的灵活性,例如添加、删除和查找元素的能力。
总的来说,集合 的大小是动态的,可以根据需要增长或缩小,大多数集合支持动态添加或移除元素,这跟数组不一样,是固定大小的,一旦创建了数组,其大小就不能改变,这让集合在编程使用的场景更多。
2.我们常用的集合类型
列表List<T>
它是最常用的集合,和数组比较像的是可以通过索引访问,其他的提供了对列表进行搜索、排序和操作的方法。
List<T>
提供了许多方便的方法来操作元素,例如:
Add(T item)
:向列表末尾添加一个元素。Remove(T item)
:从列表中移除第一个匹配的元素。IndexOf(T item)
:返回指定元素的索引。Sort()
:对列表中的元素进行排序。
键值对集合Dictionary<TKey,TValue>
Dictionary<TKey, TValue>
是一个键值对的集合,它提供了快速的查找能力。每个键都是唯一的,而值可以重复。它基于哈希表实现,因此查找操作通常是常数时间的。
常用需要频繁查找的情况,可以用于快速查找。
常用方法:
Add(TKey key, TValue value)
:添加一个新的键值对。Remove(TKey key)
:移除具有指定键的项。TryGetValue(TKey key, out TValue value)
:尝试获取具有指定键的值。
队列Queue<T>
Queue<T>
实现了先进先出(FIFO)的数据结构。它类似于排队等候的人群,最先进来的元素最先离开。
在 System.Collections.Concurrent
中有线程安全队列ConcurrentQueue<T>
,基本用法一致。
常用方法
Enqueue(T item)
:将元素添加到队列的尾部。Dequeue()
:移除并返回队列头部的元素。TryDequeue(out T item)
:尝试移除并输出头部元素,成功返回True,失败返回False。
其他一些集合类型
堆栈Stack<T>
Stack<T>
实现了后进先出(LIFO)的数据结构。它类似于一个堆栈,最后入栈的元素最先被弹出。
Push(T item)
:将元素推送到栈顶。Pop()
:移除并返回栈顶元素。
可观察集合ObservableCollection<T>
ObservableCollection<T>
表示一个可观察、可监听的动态数据集合,该集合在添加或删除项或刷新整个列表时提供通知。
这个集合常用于WPF中MVVM模式的绑定,跟ListBox、DataGrid等多项控件进行动态绑定,实时更新数据。
3. 集合常见的接口介绍
下面介绍的接口,可能经常看到,但是不常用到,是集合的最基本的一些接口,很多功能和方法都是基于这些来实现和使用的。
IEnumerable<T>
和 IEnumerator<T>
这是所有集合的基础,它们都实现了IEnumerable<T>
接口,这意味着您可以遍历集合中的元素。
IEnumerator<T>
是C#中集合的迭代器,接口提供了MoveNext()
, Current
, Dispose()
, 和 Reset()
方法,用于迭代集合。
//
// 摘要:
// 公开枚举器,它支持对指定类型的集合进行简单迭代。
//
// 类型参数:
// T:
// 要枚举的对象的类型。
public interface IEnumerable<out T> : IEnumerable
{
//
// 摘要:
// 返回一个枚举器,该枚举器可以用来遍历集合。
//
// 返回结果:
// 一个枚举器,可用于遍历集合。
IEnumerator<T> GetEnumerator();
}
//
// 摘要:
// 支持对泛型集合进行简单迭代。
//
// 类型参数:
// T:
// 要枚举的对象的类型。
public interface IEnumerator<out T> : IEnumerator, IDisposable
{
//
// 摘要:
// 获取枚举器当前位置的集合中的元素。
//
//
// 返回结果:
// 枚举器当前位置的集合中的元素。
T Current { get; }
}
ICollection<T>
这个接口扩展了IEnumerable<T>
,并添加了计数、是否为空、同步根和枚举器的创建方法。它还定义了添加、清除、复制到数组、移除范围内的元素和测试是否可修改的方法。
IList<T>
IList<T>
接口继承自ICollection<T>
,并且增加了索引器(通过索引访问元素),以及添加、移除和替换特定索引处的元素的方法。