Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ความจุ (Capacity) ของ List ใน C#

ภาพรวม

List<T>.Capacity แสดงขนาดอาร์เรย์ภายในที่จัดสรรไว้ ในขณะที่ Count แสดงจำนวนองค์ประกอบจริง Capacity เพิ่มขึ้นอัตโนมัติเมื่อเพิ่มข้อมูล (ปกติคูณ 2) สามารถตั้งค่าได้เพื่อเพิ่มประสิทธิภาพ

ตัวอย่างที่ 1: เปรียบเทียบ Capacity ของ List สองตัว

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));
    }
}

ผลลัพธ์

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

ตัวอย่างที่ 2: Clear() และตรวจสอบ Capacity อีกครั้ง

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 List1...");
        foreach (string res in list)
        {
            Console.WriteLine(res);
        }
        Console.WriteLine("\nCount of elements in list = " + list.Count);
        Console.WriteLine("Capacity of List (updated) = " + list.Capacity);
        list.Clear();
        Console.WriteLine("\nCount of elements in list (updated) = " + list.Count);
        Console.WriteLine("Capacity of List now = " + list.Capacity);
    }
}

ผลลัพธ์

Elements in List1...
One
Two
Three
Four
Five
Count of elements in list = 5
Capacity of List (updated) = 8
Count of elements in list (updated) = 0
Capacity of List now = 8

คำอธิบายเพิ่มเติม

  • Capacity เริ่มต้น = 0 เมื่อเพิ่มองค์ประกอบแรก จะกลายเป็น 4 แล้วคูณ 2 ทุกครั้งที่เต็ม (4, 8, 16, 32...)
  • การตั้งค่า Capacity ใหญ่กว่า Count ล่วงหน้า (list.Capacity = 1000) ช่วยลดการจัดสรรหน่วยความจำซ้ำ
  • TrimExcess() ลด Capacity ให้ใกล้เคียง Count (หาก Count < 90% ของ Capacity)
  • Equals() เปรียบเทียบอ้างอิง (reference) ไม่ใช่เนื้อหา ใช้ SequenceEqual() สำหรับเปรียบเทียบค่า