常见的泛型集合

集合(Collections)

集合 是存储多个对象的结构。C# 提供了两类集合:

  1. 非泛型集合 :如 ArrayListHashtable,在 C# 2.0 之前常用,但由于它们使用 object 类型存储元素,因此需要进行类型转换,可能导致运行时错误和性能损失(装箱和拆箱)。

  2. 泛型集合 :如 List<T>Dictionary<TKey, TValue>,使用泛型类存储数据,提供了类型安全和性能的改进,是 C# 2.0 之后的首选集合类型。

常见泛型集合

List<T>

List<T> 是最常用的泛型集合,它类似于动态数组,可以存储任意数量的元素。

复制代码
List<int> numbers = new List<int>(); 
numbers.Add(1); 
numbers.Add(2); 
numbers.Add(3);
 foreach (int number in numbers) 
{ 
    Console.WriteLine(number);
 }
Dictionary<TKey, TValue>

Dictionary<TKey, TValue> 是一种键值对的集合,允许你根据键来存取值。

特点:

1.键值对存储

2.键唯一性:键(TKey)在字典中唯一且不可重复

3.快速查找

4.无顺序

  • 键的唯一性高效查找Dictionary 的核心特点。

    Dictionary<string, int> ages = new Dictionary<string, int>();
    ages.Add("Alice", 25);
    ages.Add("Bob", 30);
    Console.WriteLine(ages["Alice"]); // 输出: 25

Queue<T>

Queue<T> 是先进先出(FIFO-先进先出数据缓存器)的集合。它用于在你需要按顺序处理对象时使用。

复制代码
Queue<string> queue = new Queue<string>(); 
queue.Enqueue("First");
queue.Enqueue("Second"); 
queue.Enqueue("Third"); 
Console.WriteLine(queue.Dequeue()); // 输出: First
Stack<T>

Stack<T> 是后进先出(LIFO)的集合。它用于需要按逆序处理对象时使用。

复制代码
Stack<string> stack = new Stack<string>(); 
stack.Push("First"); 
stack.Push("Second"); 
stack.Push("Third"); 
Console.WriteLine(stack.Pop()); // 输出: Third

Queue<T>Stack<T> 的对比

特性 Queue<T> Stack<T>
原则 先进先出(FIFO) 后进先出(LIFO)
添加元素方法 Enqueue(T) Push(T)
移除元素方法 Dequeue() Pop()
查看下一个元素 Peek() Peek()
适合的场景 按顺序处理任务的场景 递归、回溯、历史记录管理等场景

泛型集合的优势

  1. 类型安全:在编译时检查类型,防止无效类型插入集合。
  2. 避免装箱/拆箱:在处理值类型时,泛型集合避免了频繁的装箱和拆箱操作,从而提升性能。
  3. 更易维护和理解:泛型集合提供了更清晰的代码,容易维护和扩展。
相关推荐
unicrom_深圳市由你创科技1 小时前
工业上位机,用Python+Qt还是C#+WPF?
python·qt·c#
偶尔的鼠标人12 小时前
Avalonia DataGrid 控件的LostFocus事件会多次触发
开发语言·c#
ytttr87312 小时前
C# 仿QQ聊天功能实现 (SQL Server数据库)
数据库·oracle·c#
future_studio14 小时前
聊聊 Unity(小白专享、C# 小程序 之 图片播放器)
unity·小程序·c#
c#上位机20 小时前
wpf中Grid的MouseDown 事件无法触发的原因
c#·wpf
CodeCraft Studio1 天前
国产化PDF处理控件Spire.PDF教程:如何在 C# 中从 HTML 和 PDF 模板生成 PDF
pdf·c#·html·.net·spire.pdf·pdf文档开发·html创建模板pdf
ysdysyn1 天前
.NET 10深度解析:性能革新与开发生态的全新篇章
c#·.net
L X..1 天前
Unity 光照贴图异常修复笔记
unity·c#·游戏引擎
reasonsummer1 天前
【办公类-115-06】20250920职称资料上传04——docx复制、docx转PDF(课程表11个)
开发语言·windows·python·c#
William_cl2 天前
一、前置基础(MVC学习前提)_核心特性_【C# 泛型入门】为什么说 List<T>是程序员的 “万能收纳盒“?避坑指南在此
学习·c#·mvc