Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Dung lượng (Capacity) của List trong C#

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)