ArrayList学习笔记
一、什么是 ArrayList?
ArrayList 是 C# 中 System.Collections 命名空间下的一个动态数组类。它和普通数组(如 int[])不同,不需要提前指定长度,可以自动扩容,还能存储任意类型的对象。
简单理解:ArrayList 就是一个“可以随便加东西、长度会自动变”的盒子,什么类型的数据都能往里放(比如数字、字符串、甚至你自己定义的类)。
二、如何使用 ArrayList?
1. 引入命名空间
使用前,必须在代码顶部加上:
using System.Collections;
2. 创建 ArrayList 对象
ArrayList list = new ArrayList();
3. 添加元素(Add 方法)
list.Add(100); // 添加整数
list.Add("Hello"); // 添加字符串
list.Add(3.14); // 添加小数
list.Add(true); // 添加布尔值
注意:ArrayList 里存的其实是 object 类型(C# 中所有类型的“祖先”),所以什么都能放!
三、常用操作方法
🔹 1. 获取元素个数:Count 属性
Console.WriteLine("当前有 " + list.Count + " 个元素");
🔹 2. 通过索引访问元素(从 0 开始)
object first = list[0]; // 获取第一个元素
Console.WriteLine(first); // 输出:100
⚠️ 注意:取出来的元素是
object类型,如果要当作具体类型(比如 int)使用,需要强制转换(后面会讲)。
🔹 3. 插入元素:Insert(index, value)
list.Insert(1, "插入的内容"); // 在索引1的位置插入
插入后,原来索引1及之后的元素会自动后移。
🔹 4. 删除元素
-
按值删除(删除第一个匹配的):
list.Remove("Hello"); -
按索引删除:
list.RemoveAt(0); // 删除索引为0的元素 -
清空所有元素:
list.Clear();
🔹 5. 判断是否包含某个元素:Contains
if (list.Contains("Hello"))
{
Console.WriteLine("找到了 Hello!");
}
🔹 6. 查找元素的索引:IndexOf
int index = list.IndexOf("Hello");
if (index != -1)
{
Console.WriteLine("Hello 在索引 " + index + " 处");
}
else
{
Console.WriteLine("没找到 Hello");
}
四、遍历 ArrayList
方法1:使用 foreach(推荐)
foreach (object item in list)
{
Console.WriteLine(item);
}
方法2:使用 for 循环
for (int i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
五、类型转换问题(重点!)
因为 ArrayList 存的是 object,所以取出来时需要转成原来的类型,否则不能直接做运算。
❌ 错误示例:
ArrayList numbers = new ArrayList();
numbers.Add(10);
numbers.Add(20);
// 下面这行会报错!因为 list[0] 是 object,不能直接相加
// int sum = numbers[0] + numbers[1];
✅ 正确做法:强制类型转换
int a = (int)numbers[0]; // 转成 int
int b = (int)numbers[1];
int sum = a + b;
Console.WriteLine("总和是:" + sum);
⚠️ 如果类型转错了(比如把字符串转成 int),程序会抛出异常!所以要小心。
六、ArrayList 的缺点(为什么现在少用?)
虽然 ArrayList 很灵活,但它有两个主要问题:
- 类型不安全:什么都能放,容易放错类型,运行时才报错。
- 性能较差:因为要频繁进行“装箱”(把值类型转成 object)和“拆箱”(object 转回值类型),效率低。
更好的替代方案:List<T>
C# 后来推出了 泛型集合 List<T> (在 System.Collections.Generic 命名空间),它只能存一种类型,更安全、更快!
// 推荐写法:只存整数
List<int> numbers = new List<int>();
numbers.Add(10);
numbers.Add(20);
int sum = numbers[0] + numbers[1]; // 不用转换,直接用!
📌 建议:新项目尽量用
List<T>,不要用 ArrayList。但了解 ArrayList 有助于理解 C# 集合的发展历史。
七、完整示例代码
using System;
using System.Collections;
class Program
{
static void Main()
{
ArrayList list = new ArrayList();
// 添加不同类型的元素
list.Add("苹果");
list.Add(123);
list.Add(3.14);
list.Add(true);
// 遍历输出
foreach (object item in list)
{
Console.WriteLine(item);
}
// 取出数字并转换
int number = (int)list[1];
Console.WriteLine("取出的数字是:" + number);
// 删除元素
list.Remove("苹果");
Console.WriteLine("删除后还剩 " + list.Count + " 个元素");
}
}
八、总结
| 特点 | ArrayList |
|---|---|
| 是否需要指定长度 | ❌ 不需要,自动扩容 |
| 能存什么类型 | ✅ 任何类型(object) |
| 类型安全吗? | ❌ 不安全,容易出错 |
| 性能如何? | ⚠️ 较低(装箱/拆箱开销) |
| 现代推荐使用吗? | ❌ 不推荐,建议用 List<T> |

情之一字,不知所起,不知所栖,不知所结,不知所解,不知所踪,不知所终
浙公网安备 33010602011771号