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

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

ภาพรวม

SortedList มีคุณสมบัติ Capacity แสดงขนาดอาร์เรย์ภายในที่จัดสรรไว้ (คล้าย ArrayList) และ Count แสดงจำนวนคู่คีย์-ค่าจริง Capacity เพิ่มขึ้นอัตโนมัติเมื่อเพิ่มข้อมูล

ตัวอย่างที่ 1: SortedList 10 รายการ ดู Count และ Capacity

using System;
using System.Collections;

public class Demo
{
    public static void Main(String[] args)
    {
        SortedList sortedList = new SortedList();
        sortedList.Add("A", "1");
        sortedList.Add("B", "2");
        sortedList.Add("C", "3");
        sortedList.Add("D", "4");
        sortedList.Add("E", "5");
        sortedList.Add("F", "6");
        sortedList.Add("G", "7");
        sortedList.Add("H", "8");
        sortedList.Add("I", "9");
        sortedList.Add("J", "10");
        Console.WriteLine("SortedList elements...");
        foreach(DictionaryEntry d in sortedList)
        {
            Console.WriteLine("Key = " + d.Key + ", Value = " + d.Value);
        }
        Console.WriteLine("Count of SortedList key-value pairs = " + sortedList.Count);
        Console.WriteLine("Capacity of SortedList = " + sortedList.Capacity);
        Console.WriteLine("\nEnumerator to iterate through the SortedList...");
        IDictionaryEnumerator demoEnum = sortedList.GetEnumerator();
        while (demoEnum.MoveNext())
            Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
    }
}

ผลลัพธ์

SortedList elements...
Key = A, Value = 1
Key = B, Value = 2
Key = C, Value = 3
Key = D, Value = 4
Key = E, Value = 5
Key = F, Value = 6
Key = G, Value = 7
Key = H, Value = 8
Key = I, Value = 9
Key = J, Value = 10
Count of SortedList key-value pairs = 10
Capacity of SortedList = 16
Enumerator to iterate through the SortedList...
Key = A, Value = 1
Key = B, Value = 2
Key = C, Value = 3
Key = D, Value = 4
Key = E, Value = 5
Key = F, Value = 6
Key = G, Value = 7
Key = H, Value = 8
Key = I, Value = 9
Key = J, Value = 10

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

using System;
using System.Collections;

public class Demo
{
    public static void Main(String[] args)
    {
        SortedList sortedList = new SortedList();
        sortedList.Add("A", "1");
        sortedList.Add("B", "2");
        sortedList.Add("C", "3");
        sortedList.Add("D", "4");
        sortedList.Add("E", "5");
        sortedList.Add("F", "6");
        Console.WriteLine("SortedList elements...");
        foreach(DictionaryEntry d in sortedList)
        {
            Console.WriteLine("Key = " + d.Key + ", Value = " + d.Value);
        }
        Console.WriteLine("Count of SortedList key-value pairs = " + sortedList.Count);
        Console.WriteLine("Capacity of SortedList = " + sortedList.Capacity);
        sortedList.Clear();
        Console.WriteLine("Count of SortedList key-value pairs = " + sortedList.Count);
        Console.WriteLine("Capacity of SortedList = " + sortedList.Capacity);
    }
}

ผลลัพธ์

SortedList elements...
Key = A, Value = 1
Key = B, Value = 2
Key = C, Value = 3
Key = D, Value = 4
Key = E, Value = 5
Key = F, Value = 6
Count of SortedList key-value pairs = 6
Capacity of SortedList = 16
Count of SortedList key-value pairs = 0
Capacity of SortedList = 16

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

  • Capacity ไม่ลดลงเมื่อ Clear() ต้องใช้ TrimToSize() (หรือสร้างใหม่) เพื่อปล่อยหน่วยความจำ
  • SortedList ใช้อาร์เรย์สองตัวภายใน (keys array, values array) ขนาดเท่ากับ Capacity
  • การเพิ่มข้อมูลเกิน Capacity จะขยายอาร์เรย์ (ปกติคูณ 2) ค่าใช้จ่าย O(n)
  • SortedList เหมาะสำหรับข้อมูลที่ต้องการเรียงลำดับและค้นหาบ่อย (binary search O(log n))
  • สำหรับโค้ดใหม่ แนะนำ SortedList<TKey, TValue> (generic) หรือ SortedDictionary<TKey, TValue>