Java Stack Class: Hướng Dẫn Cho Người Mới Bắt Đầu

Giới Thiệu

Xin chào, các nhà phát triển Java tương lai! Hôm nay, chúng ta sẽ bơi lội vào thế giới thú vị của lớp Stack Java. Đừng lo nếu bạn chưa từng viết một dòng mã code - tôi sẽ là người hướng dẫn bạn thân thiện trong chuyến hành trình thú vị này.

Java - Stack Class

Hãy tưởng tượng bạn đang tổ chức sách của mình. Bạn xếp chúng lên, một cuốn trên một cuốn khác. Cuốn sách cuối cùng bạn đặt lên đống đó là cuốn bạn sẽ lấy ra đầu tiên khi cần. Đó chính là cách mà Stack hoạt động trong Java! Nó là một cấu trúc dữ liệu "Last-In-First-Out" (LIFO), và rất hữu ích trong lập trình.

Khai Báo Lớp

Hãy bắt đầu với những điều cơ bản. Trong Java, lớp Stack là một phần của gói java.util. Để sử dụng nó, bạn cần nhập như sau:

import java.util.Stack;

Lớp Stack mở rộng lớp Vector và thực hiện các giao diện như List, Collection, Iterable, Cloneable và Serializable. Đừng lo nếu những thuật ngữ này hiện tại vẫn có vẻ như ngôn ngữ ngoài hành tinh - chúng ta sẽ hiểu sau này!

Các Hàm Khởi Tạo Của Lớp

Lớp Stack chỉ có một hàm khởi tạo:

Stack<E> stack = new Stack<E>();

Ở đây, 'E' là nơi đặt thay thế cho loại phần tử bạn muốn lưu trữ trong stack của mình. Nó có thể là Integer, String hoặc bất kỳ loại đối tượng nào khác. Ví dụ:

Stack<Integer> numberStack = new Stack<Integer>();
Stack<String> bookStack = new Stack<String>();

Trong dòng đầu tiên, chúng ta đang tạo một stack sẽ chứa các số nguyên. Trong dòng thứ hai, chúng ta đang tạo một stack cho các chuỗi - hoàn hảo cho so sánh màu với đống sách!

Các Phương Thức Của Lớp

Bây giờ, hãy xem các phương thức chính của lớp Stack. Tôi sẽ trình bày chúng trong một bảng để dễ tham khảo:

Phương Thức Mô Tả
push(E item) Thêm một phần tử vào đỉnh stack
pop() Loại bỏ và trả về phần tử đỉnh từ stack
peek() Trả về phần tử đỉnh mà không loại bỏ nó
empty() Kiểm tra xem stack có trống không
search(Object o) Tìm kiếm một đối tượng và trả về vị trí của nó

Hãy phân tích chúng với một số ví dụ:

push(E item)

Stack<String> bookStack = new Stack<String>();
bookStack.push("Java for Beginners");
bookStack.push("Data Structures in Java");

Ở đây, chúng ta đang thêm sách vào stack của mình. "Data Structures in Java" bây giờ nằm trên "Java for Beginners".

pop()

String topBook = bookStack.pop();
System.out.println("Removed book: " + topBook);

Điều này loại bỏ "Data Structures in Java" từ đỉnh stack và trả nó về.

peek()

String nextBook = bookStack.peek();
System.out.println("Next book to read: " + nextBook);

Điều này cho chúng ta biết sách đỉnh mà không loại bỏ nó - trong trường hợp này là "Java for Beginners".

empty()

if (bookStack.empty()) {
System.out.println("No more books to read!");
} else {
System.out.println("You still have books to read!");
}

Điều này kiểm tra xem stack của chúng ta có trống không. Nó như kiểm tra xem bạn đã đọc hết tất cả các sách của mình chưa!

search(Object o)

int position = bookStack.search("Java for Beginners");
if (position != -1) {
System.out.println("Book found at position: " + position);
} else {
System.out.println("Book not found in the stack.");
}

Điều này tìm kiếm một cuốn sách trong stack của chúng ta. Nhớ rằng vị trí được đếm từ đỉnh, và phần tử đỉnh nằm ở vị trí 1.

Các Phương Thức Kế Thừa

Lớp Stack cũng kế thừa các phương thức từ lớp cha của nó, Vector, và các giao diện mà nó thực hiện. Một số phương thức kế thừa hữu ích bao gồm:

  • size(): Trả về số lượng phần tử trong stack
  • contains(Object o): Kiểm tra xem một đối tượng có trong stack không
  • clear(): Loại bỏ tất cả các phần tử khỏi stack

Ví Dụ

Hãy để tất cả lại với một ví dụ thú vị. Tưởng tượng chúng ta đang theo dõi stack bánh quy của mình!

import java.util.Stack;

public class PancakeStack {
public static void main(String[] args) {
Stack<String> pancakes = new Stack<>();

// Making pancakes
pancakes.push("Plain");
pancakes.push("Blueberry");
pancakes.push("Chocolate Chip");

System.out.println("Pancake stack: " + pancakes);

// Eating the top pancake
String eatenPancake = pancakes.pop();
System.out.println("Yum! Just ate a " + eatenPancake + " pancake.");

// Checking the next pancake
System.out.println("Next pancake is: " + pancakes.peek());

// Adding more pancakes
pancakes.push("Banana");

// Checking stack size
System.out.println("Number of pancakes left: " + pancakes.size());

// Searching for a pancake
int position = pancakes.search("Plain");
if (position != -1) {
System.out.println("Plain pancake is " + position + " from the top.");
} else {
System.out.println("No plain pancakes left!");
}
}
}

Output

Khi bạn chạy mã này, bạn sẽ thấy cái như sau:

Pancake stack: [Plain, Blueberry, Chocolate Chip]
Yum! Just ate a Chocolate Chip pancake.
Next pancake is: Blueberry
Number of pancakes left: 3
Plain pancake is 3 from the top.

Và đó là tất cả! Bạn vừa học được các khái niệm cơ bản về lớp Stack Java. Nhớ rằng, như xếp bánh quy hoặc sách, một Stack trong Java tuân theo nguyên tắc "Last-In-First-Out". Nó là một công cụ mạnh mẽ mà bạn sẽ tìm thấy hữu ích trong nhiều tình huống lập trình.

Tiếp tục tập luyện, và sớm bạn sẽ có khả năng xếp và loại bỏ dữ liệu như một chuyên gia! Chúc mừng mã, và may mắn cho các stack của bạn luôn đầy đủ với dữ liệu hữu ích... Tôi muốn nói là bánh quy thơm lừng... Mình có nghĩ là dữ liệu hữu ích!

Credits: Image by storyset