arraylist基础总结
ArrayList 基础总结
一、基本概念
ArrayList是 C# 1.0 引入的非泛型集合,位于System.Collections命名空间。
特点:
✅ 可以存储任意类型的数据(object)
✅ 大小动态增长(自动扩容)
✅ 按索引访问元素
❌ 需要装箱拆箱(性能开销)
❌ 类型不安全(运行时可能类型转换错误)
⚠️已被 List<T> 取代
二、创建和初始化
csharp
using System.Collections; // 1. 创建空 ArrayListArrayList list1 = new ArrayList();// 2. 指定初始容量 ArrayList list2 = new ArrayList(10); // 3. 从现有集合初始化ArrayList list3 = new ArrayList(new int[] { 1, 2, 3 }); // 4. 添加初始元素ArrayList list4 = new ArrayList() { "A", "B", "C" };
三、基本操作
1.添加元素
csharp
ArrayList list = new ArrayList(); // Add - 添加单个元素list.Add("字符串"); list.Add(123); // 装箱 list.Add(45.67);// AddRange - 添加多个元素list.AddRange(new object[] { "X", "Y", "Z" });// Insert - 指定位置插入list.Insert(1, "插入的元素");// InsertRange - 指定位置插入多个list.InsertRange(2, new object[] { "A", "B" });
2.访问元素
csharp
ArrayList list = new ArrayList() { "A", "B", "C", "D" }; // 索引访问(需要类型转换)string first = (string)list[0];// "A" // 元素数量int count = list.Count;// 4 // 当前容量 int capacity = list.Capacity; // 遍历foreach (object item in list) { Console.WriteLine(item); }// for 循环遍历for (int i = 0; i < list.Count; i++) { Console.WriteLine($"索引 {i}: {list[i]}"); }3.删除元素
csharp
ArrayList list = new ArrayList() { "A", "B", "C", "D", "B" };// Remove - 删除指定元素(第一个匹配) list.Remove("B"); // 只删除第一个"B" // RemoveAt - 删除指定索引 list.RemoveAt(0); // 删除第一个元素 // RemoveRange - 删除指定范围 list.RemoveRange(1, 2); // 从索引1开始删除2个 // Clear - 清空所有 list.Clear();4.查找元素
csharp
ArrayList list = new ArrayList() { "Apple", "Banana", "Apple" };// Contains - 是否包含 bool hasApple = list.Contains("Apple"); // true // IndexOf - 查找索引(第一个) int firstIndex = list.IndexOf("Apple"); // 0 // LastIndexOf - 查找索引(最后一个) int lastIndex = list.LastIndexOf("Apple"); // 2// BinarySearch - 二分查找(要求已排序) list.Sort(); int index = list.BinarySearch("Banana"); // 返回索引5.排序和反转
csharp
ArrayList list = new ArrayList() { 5, 2, 8, 1, 9 };// Sort - 排序(升序) list.Sort(); // 1, 2, 5, 8, 9 // Reverse - 反转 list.Reverse(); // 9, 8, 5, 2, 1// 自定义排序 list.Sort(new MyComparer());6.转换方法
csharp
ArrayList list = new ArrayList() { 1, 2, 3 };// ToArray - 转换为对象数组 object[] array = list.ToArray(); // CopyTo - 复制到数组 int[] target = new int[3]; list.CopyTo(target, 0); // GetRange - 获取子集 ArrayList subList = list.GetRange(1, 2); // 从索引1开始取2个四、ArrayList vs List<T> 对比
| 特性 | ArrayList | List<T> |
|---|---|---|
| 类型安全 | ❌ 运行时检查 | ✅ 编译时检查 |
| 性能 | ❌ 装箱拆箱开销 | ✅ 无类型转换 |
| 代码简洁性 | ❌ 需要强制转换 | ✅ 直接使用 |
| 泛型支持 | ❌ 不支持 | ✅ 支持 |
| LINQ支持 | 有限支持 | ✅ 完全支持 |
| 内存效率 | ❌ 较低 | ✅ 较高 |
| 推荐使用 | ❌ 已过时 | ✅ 现代标准 |
五、转换方法
ArrayList → List<T>
csharp
// 方法1:遍历转换 ArrayList arrayList = new ArrayList() { "A", "B", "C" }; List<string> list1 = new List<string>(); foreach (object item in arrayList) { list1.Add((string)item); // 需要转换 } // 方法2:使用 Cast 或 OfType List<string> list2 = arrayList.Cast<string>().ToList(); // 全部转换 List<string> list3 = arrayList.OfType<string>().ToList(); // 只转换string类型List<T> → ArrayList
csharp
List<string> list = new List<string>() { "A", "B", "C" }; ArrayList arrayList = new ArrayList(); arrayList.AddRange(list); // 或直接 ArrayList arrayList2 = new ArrayList(list);备忘表:
添加:
Add(),AddRange(),Insert()删除:
Remove(),RemoveAt(),Clear()查找:
Contains(),IndexOf(),BinarySearch()排序:
Sort(),Reverse()转换:
ToArray(),GetRange(),CopyTo()比较:Equals()