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

Tạo ArrayList với dung lượng ban đầu xác định trong C#

Giới thiệu

Constructor ArrayList(int capacity) cho phép chỉ định dung lượng ban đầu, tránh chi phí resize mảng nội bộ khi thêm phần tử. Capacity tự động tăng gấp đôi khi vượt quá.

Ví dụ 1: Hai ArrayList với Capacity khác nhau

using System;
using System.Collections;

public class Demo
{
    public static void Main(String[] args)
    {
        ArrayList list1 = new ArrayList(5);
        list1.Add("A");
        list1.Add("B");
        list1.Add("C");
        list1.Add("D");
        
        Console.WriteLine("Capacity in ArrayList1 = " + list1.Capacity);
        Console.WriteLine("Elements in ArrayList1...");
        foreach (string res in list1)
        {
            Console.WriteLine(res);
        }
        
        ArrayList list2 = new ArrayList(10);
        list2.Add("A");
        list2.Add("B");
        list2.Add("C");
        list2.Add("D");
        list2.Add("E");
        list2.Add("F");
        list2.Add("G");
        list2.Add("H");
        list2.Add("I");
        
        Console.WriteLine("Capacity in ArrayList2 = " + list2.Capacity);
        Console.WriteLine("Elements in ArrayList2...");
        foreach (string res in list2)
        {
            Console.WriteLine(res);
        }
        
        Console.WriteLine("Is ArrayList1 equal to ArrayList2? = " + list1.Equals(list2));
        
        list2.RemoveRange(3, 2);
        Console.WriteLine("Elements in ArrayList2 after removing elements in a range...");
        foreach (string res in list2)
        {
            Console.WriteLine(res);
        }
        Console.WriteLine("Capacity in ArrayList2 = " + list2.Capacity);
    }
}

Kết quả

Capacity in ArrayList1 = 5
Elements in ArrayList1...
A
B
C
D
Capacity in ArrayList2 = 10
Elements in ArrayList2...
A
B
C
D
E
F
G
H
I
Is ArrayList1 equal to ArrayList2? = False
Elements in ArrayList2 after removing elements in a range...
A
B
C
F
G
H
I
Capacity in ArrayList2 = 10

Ví dụ 2: Capacity sau khi Clear()

using System;
using System.Collections;

public class Demo
{
    public static void Main(String[] args)
    {
        ArrayList list = new ArrayList(5);
        list.Add("A");
        list.Add("B");
        list.Add("C");
        list.Add("D");
        
        Console.WriteLine("Capacity in ArrayList = " + list.Capacity);
        Console.WriteLine("Count of elements in ArrayList = " + list.Count);
        Console.WriteLine("Elements in ArrayList...");
        foreach (string res in list)
        {
            Console.WriteLine(res);
        }
        
        list.Clear();
        
        Console.WriteLine("Capacity in ArrayList = " + list.Capacity);
        Console.WriteLine("Count of elements in ArrayList = " + list.Count);
    }
}

Kết quả

Capacity in ArrayList = 5
Count of elements in ArrayList = 4
Elements in ArrayList...
A
B
C
D
Capacity in ArrayList = 5
Count of elements in ArrayList = 0

Quản lý Capacity hiệu quả

  • Khởi tạo đúng dung lượng: new ArrayList(1000) nếu biết trước ~1000 phần tử
  • TrimExcess(): Giảm Capacity về gần Count (tốn O(n) copy mảng)
  • Capacity setter: list.Capacity = 50 (phải ≥ Count)
  • Mặc định: 0 → 4 → 8 → 16 → 32 → 64 → 128...

ArrayList vs List<T> - Capacity

Đặc điểm ArrayList List<T>
Constructor Capacity Có Có
TrimExcess() Có Có
Boxing/Unboxing Có (object) Không (generic)
An toàn kiểu Không Có

Khuyến nghị

Luôn ưu tiên List<T> thay vì ArrayList trong code mới. Chỉ dùng ArrayList khi tương thích legacy code.