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

C# 泛型集合 List<T> 完整指南:動態容量、索引器與效能特性

     編輯:關於C語言

List<T> 核心特性

  • 動態陣列實作,自動擴容
  • 實作 IList<T>、ICollection<T>、IEnumerable<T>
  • 提供 Item 索引器(list[i] 語法)
  • 型別安全,免裝箱/拆箱

基本操作範例


var empList = new List();
var intList = new List();

// 新增元素
for (int i = 0; i < 5; i++)
{
    empList.Add(new Employee(i + 100));
    intList.Add(i * 5);
}

// 索引器存取
for (int i = 0; i < intList.Count; i++)
    Console.Write($"{intList[i]} "); // 0 5 10 15 20

// 容量屬性
Console.WriteLine($"\nCapacity: {empList.Capacity}"); // 預設 4 (.NET Core) 或 16 (.NET Framework)

容量管理機制

擴容策略

  • 預設初始容量:4(.NET Core / .NET 5+)或 16(.NET Framework)
  • 擴容因子:2 倍(新容量 = 當前容量 × 2)
  • 手動控制:Capacity 屬性可讀寫,設定較小值會截斷資料

效能影響


// 預知大致筆數時預先配置,避免多次擴容複製
var list = new List(10000); // 直接配置 10000 容量
list.AddRange(largeData);        // 單次複製完成

常用方法分類

分類方法複雜度
新增AddO(1) 攤銷
AddRangeO(n)
InsertO(n)
刪除RemoveO(n)
RemoveAtO(n)
RemoveAllO(n)
查詢ContainsO(n)
IndexOf/LastIndexOfO(n)
Find/FindAll/FindIndexO(n)
排序SortO(n log n)
ReverseO(n)
轉換ToArrayO(n)

進階用法

Predicate 委派查找


var adults = empList.FindAll(e => e.Age >= 18);
var firstSenior = empList.Find(e => e.Age >= 60);
var index = empList.FindIndex(e => e.Name.StartsWith("A"));

自訂排序


empList.Sort((a, b) => a.Name.CompareTo(b.Name)); // 委派
empList.Sort(new EmployeeNameComparer());         // IComparer

轉換與投影


var names = empList.ConvertAll(e => e.Name);     // List
var array = empList.ToArray();                   // Employee[]
var readonlyList = empList.AsReadOnly();         // ReadOnlyCollection

效能比較:List<T> vs Array vs ArrayList

操作List<T>ArrayArrayList
隨機存取O(1)O(1)O(1) + 拆箱
尾部新增O(1) 攤銷不可變O(1) 攤銷 + 裝箱
中間插入O(n)不可變O(n) + 裝箱
記憶體效率高最高低(物件參考陣列)
型別安全編譯期編譯期執行期

最佳實踐

  1. 預知大小用建構式指定初始容量
  2. 頻繁增刪中間元素考慮 LinkedList<T>
  3. 唯讀傳遞用 AsReadOnly() 或 IReadOnlyList<T>
  4. 避免在迴圈中重複存取 Count 屬性(雖然 JIT 會優化)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved