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

Kiểm tra phần tử có tồn tại trong ArrayList trong C#

Mục đích

Phương thức ArrayList.Contains(object value) trả về true nếu phần tử tồn tại trong danh sách (so sánh bằng Equals), ngược lại false.

Ví dụ 1: Kiểm tra chuỗi

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        ArrayList list = new ArrayList();
        list.Add("One"); list.Add("Two"); list.Add("Three");
        list.Add("Four"); list.Add("Five"); list.Add("Six");
        list.Add("Seven"); list.Add("Eight");

        Console.WriteLine("ArrayList elements:");
        foreach (string s in list) Console.WriteLine(s);

        Console.WriteLine($"\nIsReadOnly: {list.IsReadOnly}");
        Console.WriteLine($"Contains('Six'): {list.Contains("Six")}"); // True
        Console.WriteLine($"Contains('Nine'): {list.Contains("Nine")}"); // False
    }
}

Kết quả

ArrayList elements:
One
Two
Three
Four
Five
Six
Seven
Eight

IsReadOnly: False
Contains('Six'): True
Contains('Nine'): False

Ví dụ 2: Kiểm tra số nguyên, dùng GetEnumerator(range)

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        ArrayList list = new ArrayList { 100, 200, 300, 400, 500 };

        Console.WriteLine("Phần tử index 1..3 (GetEnumerator(1,3)):");
        IEnumerator enumr = list.GetEnumerator(1, 3); // index 1, count 3
        while (enumr.MoveNext())
            Console.WriteLine(enumr.Current);

        Console.WriteLine($"\nContains(1000): {list.Contains(1000)}"); // False
    }
}

Kết quả

Phần tử index 1..3 (GetEnumerator(1,3)):
200
300
400

Contains(1000): False

Đặc điểm Contains

  • Tìm kiếm **tuyến tính** O(n) - duyệt từ đầu đến cuối.
  • Sử dụng Equals để so sánh (cho reference type: so sánh reference, trừ string và override Equals).
  • Trả về false nếu value == null và list không chứa null.
  • Cho phép null làm giá trị tìm kiếm.

So sánh với List<T>.Contains

Đặc điểmArrayList.ContainsList<T>.Contains
Kiểu tham sốobjectT (type-safe)
BoxingCó (cho value type)Không
Hiệu năngChậm hơnNhanh hơn
Null handlingCho phépCho phép (nếu T là nullable)

Best Practice

  • Dùng List<T> thay vì ArrayList.
  • Với tìm kiếm thường xuyên, cân nhắc HashSet<T> (O(1)).
  • Override Equals và GetHashCode cho class tùy chỉnh để Contains hoạt động đúng.