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 很灵活,但它有两个主要问题

  1. 类型不安全:什么都能放,容易放错类型,运行时才报错。
  2. 性能较差:因为要频繁进行“装箱”(把值类型转成 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>
posted @ 2025-10-31 10:52  恨水长秋  阅读(18)  评论(0)    收藏  举报