C Sharp 列表集合
外观
C#列表集合[编辑 | 编辑源代码]
列表集合(List)是C#中最常用的动态集合类型之一,它属于System.Collections.Generic
命名空间,提供了灵活的数据存储和操作方法。与数组不同,列表的大小可以动态调整,支持元素的增删改查,是处理可变数据集合的理想选择。
基本介绍[编辑 | 编辑源代码]
列表(List<T>
)是一种泛型集合,其中T
代表元素的类型(如int
、string
或自定义类)。列表的主要特点包括:
- 动态大小:无需预先指定容量,可随时添加或移除元素。
- 类型安全:编译时检查元素类型,避免运行时错误。
- 丰富的方法:支持排序、搜索、遍历等操作。
创建列表[编辑 | 编辑源代码]
以下示例展示如何创建和初始化列表:
// 创建一个整数列表
List<int> numbers = new List<int>();
// 创建并初始化字符串列表
List<string> fruits = new List<string>() { "Apple", "Banana", "Cherry" };
常用操作[编辑 | 编辑源代码]
列表提供多种方法来操作元素:
添加元素[编辑 | 编辑源代码]
使用Add
方法添加单个元素,或AddRange
添加多个元素:
List<string> colors = new List<string>();
colors.Add("Red"); // 添加单个元素
colors.AddRange(new[] { "Green", "Blue" }); // 添加多个元素
访问元素[编辑 | 编辑源代码]
通过索引访问元素(从0开始):
string firstFruit = fruits[0]; // 获取第一个元素("Apple")
移除元素[编辑 | 编辑源代码]
使用Remove
、RemoveAt
或Clear
:
fruits.Remove("Banana"); // 移除指定元素
fruits.RemoveAt(0); // 移除索引为0的元素
fruits.Clear(); // 清空列表
遍历列表[编辑 | 编辑源代码]
使用foreach
循环或for
循环:
foreach (string fruit in fruits)
{
Console.WriteLine(fruit);
}
for (int i = 0; i < fruits.Count; i++)
{
Console.WriteLine(fruits[i]);
}
性能考虑[编辑 | 编辑源代码]
列表的底层实现基于数组,因此:
- 访问元素:O(1)时间复杂度(通过索引直接访问)。
- 添加元素:
* 平均情况下为O(1),但如果容量不足需重新分配内存,则为O(n)。
- 插入/删除元素:O(n)时间复杂度(需移动后续元素)。
实际案例[编辑 | 编辑源代码]
以下是一个学生成绩管理系统的简化示例:
List<Student> students = new List<Student>();
students.Add(new Student("Alice", 85));
students.Add(new Student("Bob", 90));
// 查找成绩高于88的学生
var topStudents = students.Where(s => s.Score > 88).ToList();
// 按成绩排序
students.Sort((s1, s2) => s2.Score.CompareTo(s1.Score));
高级用法[编辑 | 编辑源代码]
容量管理[编辑 | 编辑源代码]
可通过Capacity
属性手动设置容量以减少内存重新分配:
List<int> largeList = new List<int>(1000); // 预分配容量
自定义排序[编辑 | 编辑源代码]
使用IComparer<T>
接口实现复杂排序:
class StudentComparer : IComparer<Student>
{
public int Compare(Student x, Student y) => x.Score.CompareTo(y.Score);
}
students.Sort(new StudentComparer());
列表与数组的对比[编辑 | 编辑源代码]
特性 | 列表(List<T>) | 数组(T[]) |
---|---|---|
动态 | 固定 | ||
略低(需额外开销) | 更高 | ||
丰富(排序、搜索等) | 基本 |
可视化表示[编辑 | 编辑源代码]
数学表示[编辑 | 编辑源代码]
列表的查找操作可以表示为: 其中代表列表,为查找的元素。
总结[编辑 | 编辑源代码]
C#列表集合是处理动态数据的高效工具,适合大多数需要灵活存储和操作元素的场景。初学者应掌握基本操作,而高级用户可进一步优化性能或实现复杂逻辑。