C#集合/动态数组ArrayList/List<T>集合

C#集合(Collection)

集合类时专门用于数据存储和检索的类。这些类提供了对栈、队列、list和哈希表的支持。大多数集合类实现了相同的接口,

集合好比容器,将一系列相似的组合在一起,是一个特殊的类,和数组一样,可以通过索引访问集合成员,也可以通过“键”来访问,

集合可分为两类:泛型集合和非泛型集合

非泛型集合:动态数组、栈、队列、哈希表

泛型集合:Dictionary\List\Stack\Queue

C#动态数组(ArrayList)

是C#中提供的一种动态数组类,位于命名空间System.Collections中

动态数组与普通数组不同,它的大小可以动态调整,无需预先定义固定长度

动态数组代表了可被单独索引的对象的有序集合,他也允许在列表中进行动态内存分配、增加、搜索、排序各项

ArrayList 类适用于需要频繁调整大小的数组操作,但由于其非泛型特性,在现代 C# 开发中逐渐被 List 替代。

特点
  • 动态扩展:ArrayList的容量可以根据需要自动调整,不需要指定固定大小,当添加的元素超过当前容量时,ArrayList会自动增加容量(通常是原容量的两倍)

  • 非泛型集合:所有的元素被存储为object类型。这意味着替他可以存储任意类型的对象,但需要注意(装箱和拆箱的性能影响

  • 无序操作:虽然元素存储顺序与添加顺序一致,但它并不提供内置排序功能

  • 线程安全:默认不是线程安全的,如果需要线程安全。如果需要线程安全的ArrayList,可以使用ArrayList.Synchronized方法生成一个线程安全的版本

ArrayList类的方法和属性

C#集合/动态数组ArrayList/List<T>集合_第1张图片

C#集合/动态数组ArrayList/List<T>集合_第2张图片

C#集合/动态数组ArrayList/List<T>集合_第3张图片

注意:避免频繁的装箱和拆箱:如果数据主要是值类型,建议使用List来避免性能开销

慎用混合类型数据:尽量不要混合存储不同类型的对象,以降低运行时错误的风险

替代方案:推荐使用泛型集合(List\Dictionary)以提高代码的安全性和效率

List集合

List是一个泛型类,允许创建一个元素类型为T的强类型列表。List类位于System.Collections.Generic命名空间下,是.NET Framework的一部分

List numbers = new List();

List特性

可通过索引访问的强类型列表,可以对列表进行搜索、排序和相关操作

List的一些常用操作与方法
操作 方法 描述
添加元素 Add(T item) 将对象添加到List中
AddRange(IEnumerable collection) 添加集合中的元素到List中
插入元素 Insert(int indedx, T item) 在指定位置index插入元素item
删除元素 Remove(T item) 移除指定对象,如果列表中有多个该对象,只会移除第一个
RemoveAt(int index) 移除指定索引处的元素
RemoveAll(Predicate match) 移除所有匹配条件的元素
Clear() 移除所有元素
查找元素 Contains(T item) 判断是否包含特定的对象
IndexOf(T item) 返回对象的索引,如果列表中有多个该对象,只会返回第一个的索引
FindIndex(Predicate match) 返回匹配特定条件的元素的索引
Find(Predicate match) 返回匹配特定条件的第一个元素
排序 Sort() 对列表进行排序
Reverse() 反转列表中元素的顺序
转换和复制 ToArray() 将List转换为数组
CopyTo(T[] array) 将List中的元素复制到一个新的数组中
统计和求和 Sum(Func selector) 计算集合中元素的和
Average(Func selector) 计算集合中元素的平均值

注意:List是一个基于索引的集合,这意味着元素是按顺序存储的。List的容量可以动态增长,但如果需要增加容量,则会影响性能。使用List时,确保考虑内存消耗,因为他是存储在堆上的

ArrayList集合与泛型List集合的对比

特性 ArrayList List
类型安全 否(存储object类型) 是(泛型,强类型约束)
装箱与拆箱 是(值类型需要)
性能 较低 较高
泛型支持
使用场景 遗留代码及简单场景 现代开发中优先选择

你可能感兴趣的:(c#,list)