Giới thiệu
Phương thức Stack.Contains() trong C# kiểm tra xem một đối tượng có tồn tại trong Stack hay không. Trả về true nếu tìm thấy, ngược lại false.
Cú pháp
public virtual bool Contains (object ob);
Tham số ob là đối tượng cần tìm trong stack.
Ví dụ 1: Stack chuỗi
using System;
using System.Collections;
public class Demo {
public static void Main() {
Stack stack = new Stack();
stack.Push("Inspiron");
stack.Push("Alienware");
stack.Push("Projectors");
stack.Push("Monitors");
stack.Push("XPS");
stack.Push("Laptop");
stack.Push("Notebook");
Console.WriteLine("Các phần tử Stack...");
foreach(string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("Số lượng phần tử = " + stack.Count);
Console.WriteLine("Phần tử 'Speakers' có trong stack? = " + stack.Contains("Speakers"));
stack.Push("Headphone");
stack.Push("Keyboard");
stack.Push("Earphone");
Console.WriteLine("\nCác phần tử Stack...đã cập nhật");
foreach(string val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("Số lượng phần tử (đã cập nhật) = " + stack.Count);
Console.WriteLine("Phần tử 'Alienware' có trong stack? = " + stack.Contains("Alienware"));
Stack stack2 = (Stack)stack.Clone();
Console.WriteLine("\nCác phần tử Stack...đã clone");
foreach(string val in stack2) {
Console.WriteLine(val);
}
Console.Write("Số lượng phần tử (đã cập nhật) = " + stack2.Count);
}
}
Đầu ra ví dụ 1
Các phần tử Stack... Notebook Laptop XPS Monitors Projectors Alienware Inspiron Số lượng phần tử = 7 Phần tử 'Speakers' có trong stack? = False Các phần tử Stack...đã cập nhật Earphone Keyboard Headphone Notebook Laptop XPS Monitors Projectors Alienware Inspiron Số lượng phần tử (đã cập nhật) = 10 Phần tử 'Alienware' có trong stack? = True Các phần tử Stack...đã clone Earphone Keyboard Headphone Notebook Laptop XPS Monitors Projectors Alienware Inspiron Số lượng phần tử (đã cập nhật) = 10
Ví dụ 2: Stack số nguyên
using System;
using System.Collections;
public class Demo {
public static void Main() {
Stack stack = new Stack();
stack.Push(150);
stack.Push(300);
stack.Push(500);
stack.Push(750);
stack.Push(1000);
stack.Push(1250);
stack.Push(1500);
stack.Push(2000);
stack.Push(2500);
Console.WriteLine("Các phần tử Stack...");
foreach(int val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("Số lượng phần tử = " + stack.Count);
Console.WriteLine("Phần tử 750 có trong stack? = " + stack.Contains(750));
stack.Push(3000);
Console.WriteLine("\nCác phần tử Stack...đã cập nhật");
foreach(int val in stack) {
Console.WriteLine(val);
}
Console.WriteLine("Số lượng phần tử (đã cập nhật) = " + stack.Count);
Console.WriteLine("Phần tử 5000 có trong stack? = " + stack.Contains(5000));
Stack stack2 = (Stack)stack.Clone();
Console.WriteLine("\nCác phần tử Stack...đã clone");
foreach(int val in stack2) {
Console.WriteLine(val);
}
Console.Write("Số lượng phần tử (đã cập nhật) = " + stack2.Count);
}
}
Đầu ra ví dụ 2
Các phần tử Stack... 2500 2000 1500 1250 1000 750 500 300 150 Số lượng phần tử = 9 Phần tử 750 có trong stack? = True Các phần tử Stack...đã cập nhật 3000 2500 2000 1500 1250 1000 750 500 300 150 Số lượng phần tử (đã cập nhật) = 10 Phần tử 5000 có trong stack? = False Các phần tử Stack...đã clone 3000 2500 2000 1500 1250 1000 750 500 300 150 Số lượng phần tử (đã cập nhật) = 10
Đặc điểm quan trọng
- Tìm kiếm tuyến tính (linear search) từ đỉnh xuống đáy. Độ phức tạp: O(n).
- Sử dụng
Equals()để so sánh (reference equality cho reference type, value equality cho value type). - Không thay đổi stack (read-only operation).
- Trả về
falsenếu stack rỗng hoặcob == null(trừ khi stack chứa null).
Lưu ý hiệu năng
- Stack không được thiết kế cho tìm kiếm thường xuyên. Nếu cần tra cứu nhanh (O(1)), hãy dùng
HashSet<T>hoặcDictionary<TKey, TValue>song song. - Với
Stack<T>generic, tránh boxing/unboxing khi tìm kiếm value type.
Ứng dụng
- Kiểm tra trùng lặp trước khi Push (nếu yêu cầu unique).
- Debug: kiểm tra trạng thái stack chứa giá trị mong đợi.
- Thuật toán backtracking: kiểm tra trạng thái đã thăm.