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

Phương thức Stack.Clear() trong C#

Giới thiệu

Phương thức Stack.Clear() trong C# được dùng để xóa tất cả các đối tượng khỏi Stack, đặt số lượng phần tử về 0.

Cú pháp

public virtual void Clear ();

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);

        stack.Push("Ultrabook");
        stack.Push("Cameras");
        stack.Push("Keyboards");

        Console.WriteLine("\nCác phần tử Stack...đã cập nhật");
        foreach(string val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("\nSố lượng phần tử (đã cập nhật) = " + stack.Count);

        stack.Clear();
        Console.Write("Số lượng phần tử (sau Clear) = " + stack.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

Các phần tử Stack...đã cập nhật
Keyboards
Cameras
Ultrabook
Notebook
Laptop
XPS
Monitors
Projectors
Alienware
Inspiron
Số lượng phần tử (đã cập nhật) = 10
Số lượng phần tử (sau Clear) = 0

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);

        stack.Push(3000);
        stack.Push(3500);
        stack.Push(4000);

        Console.WriteLine("\nCác phần tử Stack...đã cập nhật");
        foreach(int val in stack) {
            Console.WriteLine(val);
        }
        Console.WriteLine("\nSố lượng phần tử (đã cập nhật) = " + stack.Count);

        stack.Clear();
        Console.Write("Số lượng phần tử (sau Clear) = " + stack.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

Các phần tử Stack...đã cập nhật
4000
3500
3000
2500
2000
1500
1250
1000
750
500
300
150
Số lượng phần tử (đã cập nhật) = 12
Số lượng phần tử (sau Clear) = 0

Đặc điểm quan trọng

  • Clear() đặt Count = 0 nhưng không giải phóng dung lượng nội bộ (capacity) của stack. Bộ nhớ vẫn được giữ để sử dụng lại.
  • Sau khi Clear, stack rỗng, gọi Pop() hoặc Peek() sẽ ném InvalidOperationException.
  • Phương thức này chạy trong thời gian O(1) vì chỉ cần đặt con trỏ đếm về 0.
  • Khác với việc gán stack = new Stack() (tạo đối tượng mới), Clear() giữ nguyên tham chiếu đối tượng.

Khi nào nên dùng Clear()?

  • Khi muốn tái sử dụng đối tượng stack cho một tập dữ liệu mới.
  • Khi cần giải phóng tham chiếu đến các đối tượng bên trong stack (giúp Garbage Collector).
  • Trong các thuật toán duyệt đồ thị, backtracking cần reset stack giữa các lần lặp.