Giới thiệu
List<T> quản lý mảng nội bộ động. Count = số phần tử thực tế, Capacity = dung lượng mảng nội bộ. Capacity tự động tăng (thường gấp đôi) khi Count vượt quá Capacity.
Ví dụ 1: Capacity của hai List khác nhau
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main(String[] args)
{
List<string> list1 = new List<string>();
list1.Add("One");
list1.Add("Two");
list1.Add("Three");
list1.Add("Four");
list1.Add("Five");
Console.WriteLine("Elements in List1...");
foreach (string res in list1)
{
Console.WriteLine(res);
}
Console.WriteLine("Capacity of List1 = " + list1.Capacity);
List<string> list2 = new List<string>();
list2.Add("India");
list2.Add("US");
list2.Add("UK");
list2.Add("Canada");
list2.Add("Poland");
list2.Add("Netherlands");
Console.WriteLine("Elements in List2...");
foreach (string res in list2)
{
Console.WriteLine(res);
}
Console.WriteLine("Capacity of List2 = " + list2.Capacity);
Console.WriteLine("Is List2 equal to List1? = " + list2.Equals(list1));
}
}
Kết quả
Elements in List1... One Two Three Four Five Capacity of List1 = 8 Elements in List2... India US UK Canada Poland Netherlands Capacity of List2 = 8 Is List2 equal to List1? = False
Ví dụ 2: Capacity sau khi Clear()
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main(String[] args)
{
List<string> list = new List<string>();
list.Add("One");
list.Add("Two");
list.Add("Three");
list.Add("Four");
list.Add("Five");
Console.WriteLine("Elements in List...");
foreach (string res in list)
{
Console.WriteLine(res);
}
Console.WriteLine("\nCount of elements in list = " + list.Count);
Console.WriteLine("Capacity of List (before Clear) = " + list.Capacity);
list.Clear();
Console.WriteLine("\nCount of elements in list (updated) = " + list.Count);
Console.WriteLine("Capacity of List now = " + list.Capacity);
}
}
Kết quả
Elements in List... One Two Three Four Five Count of elements in list = 5 Capacity of List (before Clear) = 8 Count of elements in list (updated) = 0 Capacity of List now = 8
Quản lý Capacity hiệu quả
- Khởi tạo với dung lượng:
new List<T>(1000)tránh resize - TrimExcess(): Giảm Capacity về gần Count (tốn O(n))
- Capacity setter:
list.Capacity = 50(phải ≥ Count) - Mặc định: Capacity = 0 → 4 → 8 → 16 → 32 → 64...
Khi nào nên điều chỉnh Capacity?
- Biết trước số lượng phần tử ước lượng → khởi tạo với Capacity
- Sau khi xóa nhiều phần tử và không thêm nữa → TrimExcess()
- Ứng dụng nhạy cảm bộ nhớ (embedded, mobile)