首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# ArrayList 動態陣列核心方法完整實戰:建立、增刪改查、排序、轉換與效能比較

     編輯:關於C語言

一、ArrayList 基礎:非泛型動態陣列

  • 命名空間:System.Collections
  • 內部以 object[] 儲存,自動擴容
  • 元素型別為 object,值類型會發生裝箱/拆箱
  • .NET 2.0+ 建議改用 List<T> 避免裝箱效能損耗

二、核心建立與列舉


ArrayList list = new ArrayList(10); // 指定初始容量
for (int i = 0; i < 10; i++) list.Add(i);

// IEnumerable 列舉
IEnumerator enumerator = list.GetEnumerator();
while (enumerator.MoveNext())
    Console.Write(enumerator.Current + " "); // 0 1 2 3 4 5 6 7 8 9

ArrayList列舉輸出

三、常用屬性與方法完整速查

分類成員說明
屬性Count目前元素數量
Capacity內部陣列容量(自動成長)
IsFixedSize / IsReadOnly / IsSynchronized固定大小/唯讀/執行緒安全
方法Add(object)附加元素,回傳索引
AddRange(ICollection)批次附加
Insert(index, object)指定位置插入
Remove(object)移除第一個相符元素
RemoveAt(index)移除指定索引元素
RemoveRange(index, count)批次移除
Clear()清空所有元素
Contains(object)是否包含元素
IndexOf(object) / LastIndexOf(object)搜尋索引
Reverse()反轉順序
Sort() / Sort(IComparer)排序
ToArray() / CopyTo(Array)轉型為陣列

四、實戰範例:完整增刪改查流程


ArrayList movies = new ArrayList(5);
movies.Add("仙劍一");
movies.Add("亮劍");
movies.Add("bianceng.");
movies.Add("國家寶藏");
movies.Add("陸小鳳");

Console.WriteLine($"初始數量: {movies.Count}"); // 5

// 列印
foreach (var m in movies) Console.WriteLine(m);

// 反轉
movies.Reverse();
Console.WriteLine("反轉後:");
foreach (var m in movies) Console.WriteLine(m);

// 新增
movies.Add("新元素");
Console.WriteLine($"新增後: {movies.Count}"); // 6

// 移除特定值
movies.Remove("亮劍");
Console.WriteLine($"移除亮劍: {movies.Count}"); // 5

// 移除指定索引
movies.RemoveAt(2);
Console.WriteLine($"移除索引2: {movies.Count}"); // 4

// 插入
movies.Insert(1, "系統級");
Console.WriteLine($"插入後: {movies.Count}"); // 5

// 搜尋
int idx = movies.IndexOf("系統級"); // 1
bool has = movies.Contains("國家寶藏"); // true

// 複製到陣列
string[] arr = new string[movies.Count];
movies.CopyTo(arr, 0);

// 轉為 object 陣列
object[] objArr = movies.ToArray();

ArrayList反轉結果 增刪改查結果1 增刪改查結果2

五、Array vs ArrayList 深度比較

維度ArrayArrayList
型別安全編譯期強型別執行期 object,需轉型
效能值類型無裝箱,極快值類型裝箱/拆箱開銷大
維度支援多維僅一維
下限可自訂(罕用)固定 0
命名空間SystemSystem.Collections
介面IList, ICollection, IEnumerableIList, ICollection, IEnumerable

六、最佳實務建議

  1. 新專案請使用 List<T>:泛型、型別安全、無裝箱、效能最佳
  2. 維護舊代碼(.NET 1.x)或需與非泛型 API 互通時才用 ArrayList
  3. 若必須使用 ArrayList,請盡量集中轉型邏輯,減少分散的 cast
  4. 大量值類型資料處理,Array 或 List<T> 為首選

總結

ArrayList 是 .NET 1.x 時代的產物,提供動態陣列便利性但犧牲型別安全與效能。現代 C# 開發應全面轉向 List<T>、Span<T>、Memory<T> 等泛型高效能替代方案。理解 ArrayList 內部機制(裝箱、擴容、非泛型介面)有助於重構舊系統與排查效能瓶頸。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved