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

Lớp Stack Trong Java

Stack trong Java là cấu trúc dữ liệu last-in, first-out (LIFO - vào sau ra trước). Mục đầu tiên bị loại khỏi stack là mục được thêm vào cuối cùng. Cấu trúc dữ liệu stack thêm mục mới vào cuối stack. Stack trong Java mở rộng lớp Vector.

Trong lập trình, stack là cấu trúc dữ liệu last-in, first-out dùng để lưu trữ dữ liệu. Stack hữu ích trong nhiều trường hợp. Ví dụ, nếu bạn muốn kiểm tra tính đối xứng trong danh sách hoặc đảo ngược thứ tự danh sách, bạn có thể dùng stack.

Khung collection trong Java bao gồm lớp stack dùng để xây dựng stack trong Java. Hướng dẫn này sẽ thảo luận cơ bản về stack trong Java, cách tạo stack, và các phương thức chính lớp stack cung cấp. Chúng ta sẽ tham khảo ví dụ xuyên suốt để củng cố cách thức hoạt động của lớp stack.

Stack Trong Java

Stack Java lưu trữ các phần tử trong cấu trúc last-in, first-out (LIFO). Điều này nghĩa là phần tử thêm vào đỉnh stack sẽ là phần tử đầu tiên bị loại khỏi stack.

Một ví dụ về stack trong lập trình là tính năng điều hướng trang của trình duyệt web. Khi bạn truy cập trang web, trình duyệt thêm nó vào bản ghi các trang đã truy cập. Bản ghi này là một stack.

Mỗi lần bạn truy cập trang web mới trong phiên duyệt, trình duyệt thêm mục mới vào stack duyệt web. Nếu bạn muốn quay lại trang cuối cùng truy cập (last-in), trình duyệt sẽ loại mục mới nhất khỏi stack trước (first-out). Bảng sau minh họa ví dụ stack:

Tên Trang Web
google.com
nytimes.com
careerkarma.com

Đây là stack lịch sử duyệt web. Chúng ta hiện tại ở trang chủ google.com. Trước google.com, chúng ta ở trang chủ New York Times. Trước đó, ở trang chủ Career Karma.

google.com ở đỉnh stack. Trang google.com sẽ là mục đầu tiên trình duyệt loại khỏi stack. Điều này xảy ra khi nhấn nút mũi tên quay lại để trở về trang cuối cùng truy cập.

Ví dụ khác về stack hoạt động là chồng sách. (Hãy nghĩ đến một stack sách!) Nếu bạn muốn lướt qua chồng sách, bạn sẽ đi từ cuốn sách trên cùng xuống. Cuốn sách cuối cùng bạn thêm vào stack sẽ là cuốn đầu tiên bạn xem — nghĩa là LIFO.

Khi làm việc với stack, mục cuối cùng trong danh sách được coi là ở đỉnh stack. Dùng ví dụ trang web trên, google.com là trang truy cập gần nhất, nên nó ở đỉnh stack.

Tạo Stack Trong Java

Trước khi tạo stack trong Java, phải import gói java.util.Stack. Gói này lưu cấu trúc dữ liệu stack chúng ta sẽ dùng.

Cách import cấu trúc dữ liệu stack:

import java.util.Stack;

Sau khi import gói stack, có thể tạo stack Java. Cú pháp tạo stack trong Java:

Stack<DataType> stack_name = new Stack<>();

Các thành phần chính của cú pháp stack Java:

  • Stack báo cho chương trình chúng ta muốn khai báo stack.
  • DataType là kiểu dữ liệu stack sẽ lưu trữ.
  • stack_name là tên stack.
  • new Stack<>(); khởi tạo stack Java mới.

Nếu muốn tạo stack tên books lưu chuỗi, dùng mã:

Stack<String> books = new Stack<>();

Chúng ta đã tạo stack mới. Stack này lưu dữ liệu theo thứ tự last-in, first-out.

Lưu Ý Về Lớp Deque

Có giá trị ghi nhận rằng một số lập trình viên thích dùng lớp deque thay vì stack trong Java.

Deques là hàng đợi hai đầu (double-ended queues). Lợi thế của deque so với stack là bạn có thể thêm và loại mục từ cả hai đầu của deque. Không thể làm điều này với stack.

Nếu bạn dùng các phương thức riêng của stack (thảo luận dưới đây), bạn phải cam kết dùng lớp stack trong mã. Điều này có thể làm khó mở rộng chương trình. Tuy nhiên, stack vẫn có nhiều ứng dụng rộng rãi trong Java.

Các Phương Thức Của Stack Trong Java

Lớp stack trong Java bao gồm nhiều phương thức dùng để thao tác dữ liệu lưu trong stack. Các phương thức này có thể chia thành hai loại:

  1. Các phương thức stack kế thừa từ lớp vector. Các phương thức đầu tiên stack cung cấp là những phương thức kế thừa từ lớp vector. Nếu muốn tìm hiểu thêm về các phương thức này, hãy tìm hiểu "Java vector class".
  1. Các phương thức chỉ có trong stack. Stack cũng cung cấp năm phương thức bổ sung chỉ có trong lớp này. Chúng ta sẽ thảo luận dưới đây. Chúng là:
  • push()
  • pop()
  • peek()
  • empty()
  • search()

Các thao tác push() và pop() có lẽ là phổ biến nhất. Chúng cho phép thêm và loại mục từ stack tương ứng.

Thêm Mục Vào Stack Java: push()

Phương thức push() thêm mục vào stack Java.

push() chấp nhận một tham số: mục bạn muốn thêm vào stack. Ví dụ, giả sử chúng ta tạo stack lưu tất cả tiêu đề sách trong phần tiểu thuyết của thư viện. Chúng ta có thể dùng mã sau để thêm ba tiêu đề sách đầu tiên vào stack:

import java.util.Stack; 
class AddBooks { 
    public static void main(String[] args) { 
        Stack<String> books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        books.push("The Great Gatsby"); 
        System.out.println(books); 
    } 
}

Kết quả chạy mã:

[Pride and Prejudice, Nineteen Eighty-Four, The Great Gatsby]

Đầu tiên, import mô-đun stack Java. Sau đó khai báo lớp — gọi là AddBooks — chứa mã chương trình.

Tiếp theo, khởi tạo stack mới — gọi là books — có thể lưu giá trị chuỗi. Sau đó dùng phương thức push() thêm ba tiêu đề sách vào stack: Pride and Prejudice, Nineteen Eighty-Four, và The Great Gatsby. Cuối cùng, in tiêu đề sách trong stack books ra bảng điều khiển.

Loại Mục Khỏi Stack Java: pop()

Phương thức pop() loại phần tử khỏi đỉnh stack. Phương thức này trả về phần tử bạn đã loại khỏi stack.

Giả sử muốn loại khỏi stack mục The Great Gatsby, là tiêu đề sách cuối cùng nhập vào. Có thể thêm mã sau vào chương trình trên:

class RemoveBooks { 
    public static void main(String[] args) { 
        Stack<String> books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        books.push("The Great Gatsby"); 
        String removed_book = books.pop(); 
        System.out.println("Books: " + books); 
        System.out.println("Removed book: " + removed_book); 
    } 
}

Kết quả chạy mã:

Books: [Pride and Prejudice, Nineteen Eighty-Four] 
Removed book: The Great Gatsby

Trong ví dụ này, mã loại mục ở đỉnh stack.

Mục ở đỉnh stack là The Great Gatsby. Sau đó, chương trình in danh sách sách đã sửa đổi tiền tố Books: ra bảng điều khiển. Tiêu đề sách bị loại tiền tố Removed book: cũng hiển thị trên bảng điều khiển.

Truy Xuất Đối Tượng Đầu Tiên Trong Stack: peek()

Khi làm việc với stack, bạn có thể muốn truy xuất mục ở đỉnh stack. Đó là lúc phương thức peek() xuất hiện. peek() không chấp nhận tham số. Nó nhìn chăm chăm (peek) vào đỉnh stack và trả về mục tìm thấy.

Giả sử muốn tìm mục ở đỉnh stack, sau khi đã loại The Great Gatsby. Có thể dùng mã sau:

import java.util.Stack; 
class FindTopBook { 
    public static void main(String[] args) { 
        Stack<String> books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        String top_book = books.peek(); 
        System.out.println("Book at top of stack: " + top_book); 
    } 
}

Kết quả chạy mã:

Book at top of stack: Nineteen Eighty-Four.

Stack chứa hai mục. Nineteen Eighty-Four ở đỉnh stack, nên khi dùng peek(), chương trình trả về tiêu đề sách đó.

Kiểm Tra Stack Có Rỗng Không: empty()

Phương thức empty() xác định xem stack có rỗng hay không.

Ví dụ, giả sử muốn kiểm tra xem stack books có rỗng không. Chúng ta đã chơi với dữ liệu trong stack. Bây giờ không chắc stack còn tiêu đề sách nào không.

Có thể dùng mã sau kiểm tra stack có rỗng không:

import java.util.Stack; 
class CheckBooksEmpty { 
    public static void main(String[] args) { 
        Stack<String> books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        String is_empty = books.empty(); 
        System.out.println("Is the book stack empty? " + is_empty); 
    } 
}

Kết quả chạy mã:

Is the book stack empty? false

Stack books chứa hai giá trị, nên không rỗng. Do đó, books.empty() trả về: false.

Tìm Kiếm Phần Tử: search()

Phương thức search() tìm kiếm phần tử trong stack.

search() chấp nhận một tham số: tên mục bạn muốn tìm kiếm. Nó trả về vị trí của mục đó trong stack.

Giả sử muốn tìm vị trí của Pride and Prejudice trong stack tiêu đề sách. Có thể làm như sau:

import java.util.Stack; 
class FindPrideBookPosition { 
    public static void main(String[] args) { 
        Stack<String> books = new Stack<>(); 
        books.push("Pride and Prejudice"); 
        books.push("Nineteen Eighty-Four"); 
        String find_book = books.search("Pride and Prejudice"); 
        System.out.println("Position of 'Pride and Prejudice': " + find_book); 
    } 
}

Kết quả chạy mã:

Position of 'Pride and Prejudice': 1. 

Mục đầu tiên trong stack có số vị trí 1. Vì Pride and Prejudice là mục đầu tiên trong stack, chương trình trả về 1.

Kết Luận

Lớp stack trong Java dùng để tạo stack với cấu trúc LIFO. Hướng dẫn này thảo luận cơ bản về stack Java và cách tạo stack. Chúng ta cũng đã nói qua năm phương thức dùng để truy xuất và thao tác nội dung stack.

Bây giờ bạn đã trang bị kiến thức cần thiết để làm việc với stack như lập trình viên Java chuyên nghiệp. Bạn có thể tìm hiểu thêm về ngôn ngữ lập trình Java bằng cách đọc hướng dẫn How to Learn Java của chúng tôi.