C#_ArrayList动态数组

目录

ArrayList的特点

[ArrayList 与普通数组的区别](#ArrayList 与普通数组的区别)

使用示例: 普通数组动态数组

主要方法和属性

属性: [Count 获取动态数组的数据个数](#Count 获取动态数组的数据个数)

[读取某个位置的数据 // 索引](#读取某个位置的数据 // 索引)
方法: [Add 向集合末尾添加元素](#Add 向集合末尾添加元素)

[Insert 在指定位置插入元素](#Insert 在指定位置插入元素)

[IndexOf 查找指定的数据 并返回索引](#IndexOf 查找指定的数据 并返回索引)

[Remove 移除指定的数据](#Remove 移除指定的数据)

[RemoveAt 删除数组中指定索引位置的值](#RemoveAt 删除数组中指定索引位置的值)

[RemoveRange 删除数组中指定范围内的数据 从0开始 删除3个](#RemoveRange 删除数组中指定范围内的数据 从0开始 删除3个)

[Reverse 反转](#Reverse 反转)

[Sort 使用默认的排序方式进行排序](#Sort 使用默认的排序方式进行排序)

[Clear 清除列表 删除动态数组中所有的数据 Count重置为0](#Clear 清除列表 删除动态数组中所有的数据 Count重置为0)

foreach遍历动态数组

[Capacity 获取或设置集合的容量](#Capacity 获取或设置集合的容量)

注意事项


在 C# 中,ArrayList 是System.Collections命名空间下的一个动态数组类,它可以存储不同类型的元素,并且能自动调整大小。以下是关于ArrayList的详细介绍和使用示例:

ArrayList的特点

  • 可以存储任意数据类型的元素(包括值类型和引用类型)
  • 大小会根据需要自动增长
  • 提供了丰富的方法用于操作集合元素
  • 属于非泛型集合,在 C# 2.0 及以后版本中,推荐使用泛型的List<T>

ArrayList 与普通数组的区别

特性 普通数组 ArrayList
大小 固定,创建时指定 动态变化
方法 只有 length 属性 提供丰富的操作方法 (add, remove 等)
存储类型 可以是基本类型或对象 只能存储对象 (基本类型会自动装箱)
性能 初始大小固定时性能好 动态扩容时有性能开销

使用示例

普通数组
cs 复制代码
int[]  arr = { 1, 2, 3, 4 };
动态数组

动态数组(一个集合) 就是不固定长度和储存的数据类型的数组;可以储存任意类型的数据 并且长度会随着数组内容的增加减少进行改变

cs 复制代码
ArrayList list1 = new ArrayList() {"张三","李四",12,20,true,'c' };

主要方法和属性

  • Add(): 向集合末尾添加元素
  • Insert在指定位置插入元素
  • Contains 查询动态数组中是否存在某个数据
  • GetRange从动态数组中截取对应数据 返回形成新的动态数组
  • IndexOf ():查找指定的数据 并返回索引
  • Remove(): 删除指定元素
  • RemoveAt 删除指定索引处的元素
  • RemoveRange删除数组中指定范围内的数据
  • Reverse 反转
  • Sort**()** :使用默认的排序方式进行排序
  • Clear(): 清空所有元素
  • Count: 获取当前元素数量
  • Capacity: 获取或设置集合的容量
属性
Count获取动态数组的数据个数
cs 复制代码
Console.WriteLine("长度:" +  list1.Count);
读取某个位置的数据 //索引
cs 复制代码
Console.WriteLine(list1[5]);
方法
Add 向集合末尾添加元素
cs 复制代码
list1.Add(20);
list1.Add(arr);
Insert 在指定位置插入元素
cs 复制代码
list1.Insert(2, "小明");
list1.Insert(4, arr);

Contains查询动态数组中是否存在某个数据

cs 复制代码
Console.WriteLine(list1.Contains("张三"));//返回true

GetRange从动态数组中截取对应数据 返回形成新的动态数组

cs 复制代码
// 参数1:开始截取的位置
// 参数2:截取的个数
ArrayList li = list1.GetRange(0, 5);
IndexOf 查找指定的数据 并返回索引
cs 复制代码
Console.WriteLine(list1.IndexOf(20));
Remove 移除指定的数据
cs 复制代码
list1.Remove('c');
RemoveAt删除数组中指定索引位置的值
cs 复制代码
list1.RemoveAt(0);
RemoveRange 删除数组中指定范围内的数据 从0开始 删除3个
cs 复制代码
list1.RemoveRange(0, 3);
Reverse反转
cs 复制代码
list1.Reverse();
Sort使用默认的排序方式进行排序
cs 复制代码
list1.Sort();
Clear清除列表 删除动态数组中所有的数据 Count重置为0
cs 复制代码
list1.Clear();
foreach遍历动态数组
cs 复制代码
foreach (var item in list1)
{
    Console.WriteLine(item);
}
Capacity 获取或设置集合的容量
cs 复制代码
空的动态数组。长度起始为0,后期加入数据会自动扩大空间0->4->8->16->...->n*2
list1.Capacity = 0;
Console.WriteLine(list1.Capacity);

长度起始为10,后期加入数据会自动扩大空间20->40->80->160->...->n*2
list1.Capacity = 10;
Console.WriteLine(list1.Capacity);

注意事项

  1. ArrayList存储的是object类型,因此值类型会发生装箱操作,可能影响性能
  2. 从ArrayList中获取元素时需要进行显式类型转换
  3. 在.NET Framework 2.0 及以上版本中,建议使用泛型List<T>替代ArrayList,因为List<T>提供了类型安全和更好的性能

如果你需要类型安全且高性能的动态数组,应该优先考虑使用System.Collections.Generic命名空间下的列表List<T>。

相关推荐
卢锡荣4 小时前
乐得瑞Type-c接口产品描述
c语言·开发语言
晴天的雨.9924 小时前
【C++】模板进阶
开发语言·c++·算法
遇印记14 小时前
传输层,网络层
运维·服务器·网络·windows·学习
死磕音视频15 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
又見山16 小时前
Obsidian 跨平台同步实测:Nutstore Sync 在 Windows、Mac、Linux、iOS、Android 全平台综合测评
windows·macos·obsidian·obsidian同步·obsidian教程·obsidian入门·obsidian笔记库搭建
顽疲17 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
jearry17 小时前
一个编辑器两个内核:Markdown 实时视图与源码视图并存时的竞态、光标锚点与 PDF 导出
windows·markdown
Wang's Blog17 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
逆向编程17 小时前
DirectX修复工具下载安装教程-Windows系统DLL缺失检测修复完整图文步骤
windows
曹牧18 小时前
C#:输入的字符串格式不正确
c#