Ngăn xếp Java là cấu trúc dữ liệu nhập sau cùng, xuất trước. Mục đầu tiên bị xóa khỏi ngăn xếp là mục được thêm cuối cùng vào ngăn xếp. Cấu trúc dữ liệu ngăn xếp thêm các mục mới vào cuối ngăn xếp. Ngăn xếp Java mở rộng lớp Vector.
Trong lập trình, ngăn xếp là cấu trúc dữ liệu nhập sau cùng, xuất trước dùng để lưu trữ dữ liệu. Ngăn xếp 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ự của danh sách, bạn có thể sử dụng ngăn xếp.
Khung bộ sưu tập Java bao gồm một lớp được gọi là ngăn xếp được sử dụng để xây dựng các ngăn xếp trong Java. Hướng dẫn này sẽ thảo luận về những điều cơ bản về ngăn xếp trong Java, cách tạo ngăn xếp và các phương pháp chính mà lớp ngăn xếp cung cấp. Chúng tôi sẽ đề cập đến các ví dụ xuyên suốt để củng cố cách hoạt động của lớp ngăn xếp.
Ngăn xếp Java
Ngăn xếp Java lưu trữ các phần tử trong cấu trúc nhập sau cùng, xuất trước (LIFO). Điều này có nghĩa là phần tử được thêm vào đầu ngăn xếp sẽ là phần tử đầu tiên bị xóa khỏi ngăn xếp.
Một ví dụ về ngăn xếp trong lập trình sẽ nằm trong các tính năng kiểm soát trang của trình duyệt web. Khi bạn truy cập một trang web, trình duyệt web của bạn sẽ thêm nó vào bản ghi các trang đã truy cập. Bản ghi này là một ngăn xếp.
Mỗi lần bạn truy cập một trang web mới trong một phiên duyệt, trình duyệt của bạn sẽ thêm một mục mới vào ngăn xếp duyệt. Nếu bạn muốn quay lại trang cuối cùng bạn đã truy cập ( last-in ), trước tiên trình duyệt của bạn sẽ xóa mục nhập gần đây nhất khỏi ngăn xếp ( xuất trước ). Đây là bảng hiển thị ngăn xếp mẫu:
Tên trang web |
google.com |
nytimes.com |
Careerkarma.com |
Đây là ngăn xếp lịch sử duyệt web của chúng tôi. Chúng tôi hiện đang ở trên trang chính google.com. Trước trang google.com, chúng tôi đã ở trên New York Times Trang chính. Trước đó, chúng tôi đã ở trên trang chính của Career Karma.
google.com ở trên cùng của ngăn xếp. Trang web google.com sẽ là mục đầu tiên mà trình duyệt của chúng tôi xóa khỏi ngăn xếp. Điều này xảy ra khi chúng tôi nhấn nút mũi tên quay lại để quay lại trang cuối cùng chúng tôi đã truy cập.
81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.
Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.
Một ví dụ khác về ngăn xếp đang hoạt động là một chồng sách. (Hãy nghĩ về một ngăn xếp sách!) Nếu bạn muốn xem qua một đống sách, bạn sẽ đi từ sách trên cùng xuống. Cuốn sách cuối cùng bạn thêm vào ngăn xếp sẽ là cuốn sách đầu tiên bạn xem — nói cách khác, LIFO.
Khi bạn đang làm việc với ngăn xếp, mục cuối cùng trong danh sách được coi là ở đầu ngăn xếp . Để sử dụng ví dụ về trang web của chúng tôi ở trên, google.com là trang web gần đây nhất chúng tôi đã truy cập, vì vậy nó nằm ở đầu ngăn xếp của chúng tôi.
Tạo ngăn xếp Java
Trước khi tạo một ngăn xếp trong Java, chúng ta phải nhập gói java.util.Stack. Gói này lưu trữ cấu trúc dữ liệu ngăn xếp mà chúng tôi sẽ sử dụng trong hướng dẫn này.
Dưới đây là cách nhập cấu trúc dữ liệu ngăn xếp:
import java.util.Stack;
Bây giờ chúng ta đã nhập gói ngăn xếp, chúng ta có thể tạo ngăn xếp Java. Đây là cú pháp chúng tôi đã sử dụng để tạo ngăn xếp trong Java:
Stack<DataType> stack_name = new Stack<>();
Dưới đây là các thành phần chính của cú pháp ngăn xếp Java:
- Ngăn xếp cho chương trình của chúng tôi biết rằng chúng tôi muốn khai báo một ngăn xếp.
- DataType là loại dữ liệu mà ngăn xếp của chúng tôi sẽ lưu trữ.
- stack_name là tên của ngăn xếp của chúng tôi.
- Ngăn xếp mới <> (); khởi tạo một ngăn xếp Java mới.
Nếu chúng tôi muốn tạo một ngăn xếp có tên là books
lưu trữ các chuỗi, chúng tôi có thể sử dụng mã này:
Stack<String> books = new Stack<>();
Chúng tôi đã tạo một ngăn xếp mới. Ngăn xếp này lưu trữ dữ liệu theo thứ tự nhập sau cùng, xuất trước.
Lưu ý về Deque Class
Cần lưu ý rằng một số lập trình viên thích sử dụng lớp deque thay vì lớp ngăn xếp trong Java.
Deques là hàng đợi kết thúc kép. Ưu điểm của deque so với stack là bạn có thể thêm và xóa các mục từ cả hai đầu của deque. Bạn không thể làm điều này với một ngăn xếp.
Nếu bạn sử dụng các phương pháp dành riêng cho ngăn xếp (được thảo luận bên dưới), bạn sẽ phải cam kết sử dụng lớp ngăn xếp trong mã của mình. Điều này có thể làm cho việc mở rộng một chương trình trở nên khó khăn hơn. Điều đó nói rằng, ngăn xếp vẫn có nhiều cách sử dụng trong Java.
Phương thức ngăn xếp Java
Lớp ngăn xếp Java bao gồm một số phương thức mà bạn có thể sử dụng để thao tác với dữ liệu được lưu trữ trong ngăn xếp. Các phương pháp này có thể được chia thành hai loại sau:
- Các phương thức ngăn xếp được kế thừa từ lớp vectơ. Các cung cấp ngăn xếp phương thức đầu tiên là những cung cấp được kế thừa từ lớp vectơ. Nếu bạn đang muốn tìm hiểu thêm về các phương pháp này, hãy nghiên cứu “Lớp vectơ Java”.
- Các phương pháp ngăn xếp là duy nhất để xếp chồng. Stack cũng cung cấp năm phương thức bổ sung duy nhất cho lớp. Chúng tôi sẽ thảo luận về chúng bên dưới. Họ là:
- push ()
- pop ()
- peek ()
- trống ()
- search ()
Các hoạt động push () và pop () được cho là được sử dụng phổ biến nhất. Chúng cho phép bạn thêm và xóa các mục từ một ngăn xếp tương ứng.
Thêm mục vào ngăn xếp Java:push ()
push () phương thức thêm một mục vào ngăn xếp Java.
push () chấp nhận một tham số:mục bạn muốn thêm vào ngăn xếp của mình. Ví dụ:giả sử chúng tôi đang tạo một ngăn xếp lưu trữ tất cả các tên sách trong phần tiểu thuyết của thư viện. Chúng tôi có thể sử dụng mã này để thêm ba tên sách đầu tiên vào ngăn xếp:
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); } }
Mã của chúng tôi trả về:
[Pride and Prejudice, Nineteen Eighty-Four, The Great Gatsby]
Đầu tiên, chúng tôi nhập mô-đun ngăn xếp Java. Sau đó, chúng tôi khai báo một lớp — được gọi là AddBooks —Đó lưu trữ mã cho chương trình của chúng tôi.
Trên dòng tiếp theo, chúng tôi khởi tạo một ngăn xếp mới — được gọi là sách —Đó có thể lưu trữ các giá trị chuỗi. Sau đó, chúng tôi sử dụng push () phương pháp để thêm ba tên sách vào ngăn xếp của chúng tôi: Kiêu hãnh và Định kiến , Mười chín tám mươi tư và The Great Gatsby . Cuối cùng, chúng tôi in tên sách trong sách của chúng tôi xếp vào bảng điều khiển.
Xóa mục khỏi ngăn xếp Java:pop ()
pop()
phương thức xóa một phần tử khỏi đầu ngăn xếp. Phương thức này trả về phần tử mà bạn đã xóa khỏi ngăn xếp.
Giả sử chúng tôi muốn xóa mục nhập cho The Great Gatsby , đó là tên sách cuối cùng chúng tôi đã nhập. Chúng tôi có thể thêm mã sau vào chương trình của chúng tôi ở trên để hoàn thành nhiệm vụ này:
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); } }
Mã của chúng tôi trả về:
Books: [Pride and Prejudice, Nineteen Eighty-Four] Removed book: The Great Gatsby
Trong ví dụ này, mã của chúng tôi xóa mục trên đầu ngăn xếp.
Vật phẩm ở trên cùng của ngăn xếp là The Great Gatsby. Sau đó, chương trình của chúng tôi in ra danh sách các sách đã sửa đổi trước Sách: vào bảng điều khiển. Tên sách đã bị xóa trước Sách đã xóa: cũng được hiển thị trên bảng điều khiển.
Lấy đối tượng đầu tiên trong ngăn xếp:peek ()
Khi bạn đang làm việc với ngăn xếp, bạn có thể muốn lấy mục ở trên cùng của ngăn xếp. Đó là nơi mà peek () có phương thức. peek () không chấp nhận tham số. Nó lấp ló ở trên cùng của ngăn xếp và trả về mục mà nó tìm thấy.
Giả sử chúng tôi muốn tìm xem mục nào ở đầu ngăn xếp của mình, bây giờ chúng tôi đã xóa The Great Gatsby . Chúng tôi có thể sử dụng mã sau để làm như vậy:
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); } }
Mã của chúng tôi trả về:
Book at top of stack: Nineteen Eighty-Four.
Ngăn xếp của chúng tôi chứa hai mục. Mười chín tám mươi tư ở trên cùng của ngăn xếp, vì vậy khi chúng tôi sử dụng peek () , chương trình của chúng tôi trả về tên sách đó.
Kiểm tra xem ngăn xếp có trống không:blank ()
Dấu trống () phương thức xác định xem một ngăn xếp có trống hay không.
Ví dụ:giả sử chúng tôi muốn kiểm tra xem sách của chúng tôi ngăn xếp trống. Chúng tôi đã thử với dữ liệu trong ngăn xếp của mình. Bây giờ chúng tôi không chắc liệu ngăn xếp có chứa thêm bất kỳ tên sách nào nữa hay không.
Chúng tôi có thể sử dụng mã sau để kiểm tra xem ngăn xếp của chúng tôi có trố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); } }
Mã của chúng tôi trả về:
Is the book stack empty? false
sách của chúng tôi ngăn xếp chứa hai giá trị, vì vậy nó không trống. Do đó, books.empty () trả về:false.
Tìm kiếm phần tử:search ()
Tìm kiếm () phương thức tìm kiếm một phần tử trong ngăn xếp.
search () chấp nhận một tham số:tên của mục mà bạn muốn tìm kiếm. Nó trả về vị trí của mục đó trong ngăn xếp.
Giả sử chúng tôi muốn tìm hiểu vị trí của Kiêu hãnh và định kiến trong ngăn xếp tên sách của chúng tôi. Chúng tôi có thể làm như vậy bằng cách sử dụng mã này:
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); } }
Mã của chúng tôi trả về:
Position of 'Pride and Prejudice': 1.
Mục đầu tiên trong ngăn xếp có số vị trí là 1 ,. Bởi vì Kiêu hãnh và Định kiến là mục đầu tiên trong ngăn xếp, chương trình của chúng tôi trả về 1.
Kết luận
Lớp ngăn xếp Java được sử dụng để tạo ngăn xếp với cấu trúc LIFO. Hướng dẫn này đã thảo luận những điều cơ bản về ngăn xếp Java và cách bạn có thể tạo ngăn xếp. Chúng ta cũng đã nói về năm phương pháp được sử dụng để truy xuất và thao tác nội dung của một ngăn xếp.
Giờ đây, bạn đã được trang bị kiến thức cần thiết để làm việc với các ngăn xếp như một nhà phát triể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 Cách học Java của chúng tôi.