在 C# 中,动态数组(ArrayList)代表了可被单独索引的对象的有序集合。动态数组基本上可以代替数组,唯一与数组不同的是,动态数组可以使用索引在指定的位置添加和移除指定的项目,动态数组会自动重新调整自身的大小。另外,动态数组允许在列表中进行动态内存分配、增加、搜索、排序等操作。

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        // 创建一个 ArrayList 实例
        ArrayList arrayList = new ArrayList();

        // 添加元素(支持多种数据类型)
        arrayList.Add("Apple");
        arrayList.Add(123);
        arrayList.Add(true);
        arrayList.Add(3.14);

        Console.WriteLine("初始 ArrayList 内容:");
        PrintArrayList(arrayList);

        // 插入元素到指定位置
        arrayList.Insert(1, "Inserted Item");

        Console.WriteLine("\n插入元素后的内容:");
        PrintArrayList(arrayList);

        // 删除特定值的元素
        arrayList.Remove("Inserted Item");

        Console.WriteLine("\n删除 'Inserted Item' 后的内容:");
        PrintArrayList(arrayList);

        // 删除指定索引处的元素
        arrayList.RemoveAt(0);

        Console.WriteLine("\n删除索引 0 处的元素后的内容:");
        PrintArrayList(arrayList);

        // 查找元素是否存在
        bool containsNumber = arrayList.Contains(123);
        Console.WriteLine($"\n是否包含数字 123?{containsNumber}");

        // 获取索引
        int index = arrayList.IndexOf(123);
        Console.WriteLine($"数字 123 的索引是: {index}");

        // 排序(注意:混合类型时可能抛出异常)
        try
        {
            arrayList.Sort();
            Console.WriteLine("\n排序后的内容:");
            PrintArrayList(arrayList);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"排序失败: {ex.Message}");
        }

        // 属性访问
        Console.WriteLine($"\nCount(实际元素数): {arrayList.Count}");
        Console.WriteLine($"Capacity(当前容量): {arrayList.Capacity}");
        Console.WriteLine($"IsFixedSize(是否固定大小): {arrayList.IsFixedSize}");
        Console.WriteLine($"IsReadOnly(是否只读): {arrayList.IsReadOnly}");
        Console.WriteLine($"IsSynchronized(是否线程安全): {arrayList.IsSynchronized}");
        Console.WriteLine($"SyncRoot(用于线程同步的对象): {arrayList.SyncRoot}");

        // 使用线程安全方法访问(推荐方式)
        lock (arrayList.SyncRoot)
        {
            Console.WriteLine("\n在锁内执行操作以确保线程安全...");
            arrayList.Add("Thread-safe Item");
        }

        Console.WriteLine("\n线程安全操作后的内容:");
        PrintArrayList(arrayList);
    }

    // 辅助方法:打印 ArrayList 中的所有元素
    static void PrintArrayList(ArrayList list)
    {
        foreach (var item in list)
        {
            Console.WriteLine(item);
        }
    }
}

输出结果:

初始 ArrayList 内容:
Apple
123
True
3.14

插入元素后的内容:
Apple
Inserted Item
123
True
3.14

删除 'Inserted Item' 后的内容:
Apple
123
True
3.14

删除索引 0 处的元素后的内容:
123
True
3.14

是否包含数字 123?True
数字 123 的索引是: 0

排序失败: At least one element in the array is of a type that is not assignable to the type of the destination array.

Count(实际元素数): 3
Capacity(当前容量): 4
IsFixedSize(是否固定大小): False
IsReadOnly(是否只读): False
IsSynchronized(是否线程安全): False
SyncRoot(用于线程同步的对象): System.Collections.ArrayList

在锁内执行操作以确保线程安全...

线程安全操作后的内容:
123
True
3.14
Thread-safe Item


 

更多推荐