Trong bài viết này, chúng ta sẽ cùng tìm hiểu về Deque Interface trong Java, cách sử dụng và các phương thức của nó cùng với ví dụ dẫn chứng.
Deque Interface
Deque Interface của Collection Framework Java cung cấp chức năng của hàm đợi Double-ended queue, là hàm đợi mà trong đó các phần tử có thể được thêm hoặc lấy ra từ 2 đầu của hàng đợi. Nó kế thừa Queue Interface.
Cách thức làm việc của Deque
Trong một hàng đợi thông thường, các phần tử được thêm vào từ phía sau và lấy ra từ phía trước. Tuy nhiên, trong Deque, chúng ta có thể chèn và xóa các phần tử từ cả phía trước và phía sau.
Các lớp triển khai Deque
Để sử dụng các chức năng của Deque Interface, chúng ta cần sử dụng các lớp triển khai cho nó:
- ArrayDeque
- LinkedList
Làm thế nào để sử dụng Deque?
Trong Java, chúng ta phải thêm gói package java.util.Deque để sử dụng Deque.
1 2 |
Deque<String> a1 = new ArrayDeque<>(); Deque<String> a2 = new LinkedList<>(); |
Ở đây, chúng ta đã tạo các đối tượng a1 và a2 của các lớp ArrayDeque và LinkedList tương ứng. Các đối tượng này có thể sử dụng các chức năng của Deque Interface.
Các phương thức của Deque
Vì Deque kế thừa Queue Interface, nó sẽ kế thừa tất cả các phương thức của Queue Interface.
Bên cạnh các phương thức có sẵn trong Queue Interface, Deque Interface cũng bao gồm các phương thức sau:
- Phương thức addFirst(): Thêm phần tử được chỉ định vào đầu của Deque. Đưa ra một ngoại lệ nếu Deque không còn chỗ trống.
- Phương thức addLast(): Thêm phần tử được chỉ định vào cuối của Deque. Đưa ra một ngoại lệ nếu Deque đầy hoặc không có chỗ trống.
- Phương thức offerFirst(): Thêm phần tử được chỉ định vào đầu của Deque. Trả về false nếu Deque đầy.
- Phương thức offerLast(): Thêm phần tử được chỉ định vào cuối của Deque. Trả về false nếu Deque đầy.
- Phương thức getFirst(): Trả về phần tử đầu tiên của Deque. Đưa ra một ngoại lệ nếu Deque trống rỗng.
- Phương thức getLast(): Trả về phần tử cuối cùng của Deque. Đưa ra một ngoại lệ nếu Deque rỗng.
- Phương thức peekFirst(): Trả về phần tử đầu tiên của Deque. Trả về null nếu Deque trống rỗng.
- Phương thức peekLast(): Trả về phần tử cuối cùng của Deque. Trả về null nếu Deque trống rỗng.
- Phương thức removeFirst(): Trả về và xóa phần tử đầu tiên của Deque. Đưa ra một ngoại lệ nếu Deque trống rỗng.
- Phương thức removeLast(): Trả về và xóa phần tử cuối cùng của Deque. Đưa ra một ngoại lệ nếu Deque trống rỗng.
- Phương thức pollFirst(): Trả về và xóa phần tử đầu tiên của Deque. Trả về null nếu Deque rỗng.
- Phương thức pollLast(): Trả về và loại bỏ phần tử cuối cùng của Deque. Trả về null nếu Deque trống rỗng.
Deque được sử dụng làm cấu trúc dữ liệu ngăn xếp
Lớp Stack của Collections Framework cung cấp việc triển khai của ngăn xếp. Tuy nhiên, nên sử dụng Deque như một ngăn xếp thay vì lớp Stack. Đó là vì các phương thức của Stack được đồng bộ hóa.
Dưới đây là các phương pháp mà Deque Interface cung cấp để triển khai Stack:
- Phương thức push(): Thêm một phần tử vào đầu của Deque.
- Phương thức pop(): Xóa một phần tử đầu tiên của Deque.
- Phương thức peek(): Trả về một phần tử đầu tiên của Deque.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.util.Deque; import java.util.ArrayDeque; class Main { public static void main(String[] args) { Deque<Integer> so_nguyen = new ArrayDeque<>(); so_nguyen.offer(32); so_nguyen.offerLast(45); so_nguyen.offerFirst(65); System.out.println(so_nguyen); int phan_tu_dau = so_nguyen.peekFirst(); System.out.println(phan_tu_dau); int phan_tu_cuoi = so_nguyen.peekLast(); System.out.println(phan_tu_cuoi); int phan_tu_lay_ra = so_nguyen.pollLast(); System.out.println(phan_tu_lay_ra); System.out.println(so_nguyen); } } |
Kết quả:
1 2 3 4 5 |
[65, 32, 45] 65 45 45 [65, 32] |
Trên đây là khái niệm và ví dụ cơ bản về Deque Interface trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!