Trong bài này, chúng ta sẽ tìm hiểu về class Stack trong Java và các hàm của nó qua các ví dụ.

Collections framework trong Java có một class tên là Stack cung cấp chức năng của cấu trúc dữ liệu stack.

Class Stack là một class phụ của class Vector.

1. Triển khai class stack

Trong class stack, các phần tử được lưu trữ và truy cập theo cơ chế Last In First Out. Có nghĩa là, stack giống như một ngăn xếp thẳng đứng, các phần tử được thêm vào stack theo chiều từ dưới lên và loại bỏ khỏi stack theo chiều từ trên xuống.

2. Tạo một stack

Để tạo một stack, đầu tiên, chúng ta phải import gói java.util.Stack. Khi chúng ta đã nhập gói, chúng ta có thể tạo một stack trong Java theo cách sau đây.

Stack<Type> stacks = new Stack<>();

Ở đây, Type là kiểu dữ liệu của stack. Ví dụ,

// Create Integer type stack
Stack<Integer> stacks = new Stack<>();

// Create String type stack
Stack<String> stacks = new Stack<>();

3. Hàm của stack

Vì stack là class phụ của class vector, nó kế thừa tất cả các hàm của Vector. Để tìm hiểu về các hàm Vector khác nhau , hãy truy cập Class  Vector trong Java .

Bên cạnh các hàm này, class Stack còn có thêm 5 hàm khác với Vector.

3.1 Hàm push()

Để thêm một phần tử vào đầu stack, chúng ta sử dụng hàm push(). Ví dụ,

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

import java.util.Stack;

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

        // Add elements to Stack
        animals.push("Dog");
        animals.push("Horse");
        animals.push("Cat");

        System.out.println("Stack: " + animals);
    }
}

Kết quả

Stack: [Dog, Horse, Cat]

3.2 Hàm pop()

Để loại bỏ một phần tử khỏi đỉnh stack, chúng ta sử dụng hàm  pop(). Ví dụ,

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

import java.util.Stack;

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

        // Add elements to Stack
        animals.push("Dog");
        animals.push("Horse");
        animals.push("Cat");
        System.out.println("Initial Stack: " + animals);

        // Remove element stacks
        String element = animals.pop();
        System.out.println("Removed Element: " + element);
    }
}

Kết quả

Initial Stack: [Dog, Horse, Cat]
Removed Element: Cat

3.3 Hàm peek()

Các hàm peek() trả về đối tượng ở phía trên cùng của stack. Ví dụ,

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

import java.util.Stack;

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

        // Add elements to Stack
        animals.push("Dog");
        animals.push("Horse");
        animals.push("Cat");
        System.out.println("Stack: " + animals);

        // Access element from the top
        String element = animals.peek();
        System.out.println("Element at top: " + element);

    }
}

Kết quả

Stack: [Dog, Horse, Cat]
Element at top: Cat

4. Hàm search()

Để tìm kiếm một phần tử trong stack, chúng ta sử dụng hàm search(). Nó trả về vị trí của phần tử ở đỉnh stack. Ví dụ,

import java.util.Stack;

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

        // Add elements to Stack
        animals.push("Dog");
        animals.push("Horse");
        animals.push("Cat");
        System.out.println("Stack: " + animals);

        // Search an element
        int position = animals.search("Horse");
        System.out.println("Position of Horse: " + position);
    }
}

Kết quả

Stack: [Dog, Horse, Cat]
Position of Horse: 2

4.1 Hàm empty()

Để kiểm tra xem một stack có trống hay không, chúng ta sử dụng hàm empty(). Ví dụ,

/**
* Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
*
* @author cafedevn
* Contact: cafedevn@gmail.com
* Fanpage: https://www.facebook.com/cafedevn
* Instagram: https://instagram.com/cafedevn
* Twitter: https://twitter.com/CafedeVn
* Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/

import java.util.Stack;

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

        // Add elements to Stack
        animals.push("Dog");
        animals.push("Horse");
        animals.push("Cat");
        System.out.println("Stack: " + animals);

        // Check if stack is empty
        boolean result = animals.empty();
        System.out.println("Is the stack empty? " + result);
    }
}

Kết quả

Stack: [Dog, Horse, Cat]
Is the stack empty? false

5. Dùng ArrayDeque thay vì dùng Stack

Class Stack triển khai trực tiếp cấu trúc dữ liệu stack. Tuy nhiên, chúng ta không nên sử dụng nó. Thay vào đó, nên sử dụng class ArrayDeque (class này triển khai Deque interface) để triển khai cấu trúc dữ liệu stack trong Java.

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!