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ề
falsenếuvalue == nullvà list không chứa null. - Cho phép
nulllàm giá trị tìm kiếm.
So sánh với List<T>.Contains
| Đặc điểm | ArrayList.Contains | List<T>.Contains |
|---|---|---|
| Kiểu tham số | object | T (type-safe) |
| Boxing | Có (cho value type) | Không |
| Hiệu năng | Chậm hơn | Nhanh hơn |
| Null handling | Cho phép | Cho 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
EqualsvàGetHashCodecho class tùy chỉnh để Contains hoạt động đúng.