Trong bài này, chúng ta sẽ tìm hiểu về interface Deque, cách sử dụng nó và các hàm của nó.
Deque interface của collections framework trong Java cung cấp các chức năng của một hàng đợi hai đầu. Nó được mở rộng từ Queue interface.
Nội dung chính
1. Cách 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à loại bỏ từ phía trước. Tuy nhiên, trong một deque, chúng ta có thể chèn và loại bỏ các phần tử từ cả phía trước và phía sau.
![](https://cafedev.vn/wp-content/uploads/2020/05/cafedevn_dequeue_java-1024x177.png)
2. Các class 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 class triển khai nó như:
ArrayDeque
![](https://cafedev.vn/wp-content/uploads/2020/05/cafedev_array_dequeue.png)
3. Sử dụng Deque như thế nào?
Trong Java, để sử dụng Deque, chúng ta phải import gói java.util.Deque.
// Array implementation of Deque
Deque<String> animal1 = new ArrayDeque<>();
// LinkedList implementation of Deque
Deque<String> animal2 = new LinkedList<>();
Ở đây, chúng ta đã tạo các đối tượng Animal1 và Animal2 của các class tương ứng là class ArrayDeque và LinkedList. Những đối tượng này có thể sử dụng các chức năng của Deque interface.
4. Hàm của Deque
Vì Deque interface nằm trong Queue interface, nó thừa kế tất cả các hàm 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 hàm sau:
- addFirst () – Thêm phần tử được chỉ định vào đầu deque. Nếu deque đã đầy thì ném một ngoại lệ.
- addLast () – Thêm phần tử được chỉ định vào cuối deque. Nếu deque đã đầy thì ném một ngoại lệ.
- OfferFirst () – Thêm phần tử được chỉ định vào đầu deque. Trả về false nếu deque đã đầy.
- OfferLast () – Thêm phần tử được chỉ định vào cuối deque. Trả về false nếu deque đã đầy.
- getFirst () – Trả về phần tử đầu tiên của deque. Nếu deque trống thì ném một ngoại lệ.
- getLast () – Trả về phần tử cuối cùng của deque. Nếu deque trống thì ném một ngoại lệ.
- peekFirst () – Trả về phần tử đầu tiên của deque. Trả về null nếu deque trống.
- peekLast () – Trả về phần tử cuối cùng của deque. Trả về null nếu deque trống.
- removeFirst () – Trả về và xóa phần tử đầu tiên của deque. Nếu deque trống thì ném một ngoại lệ.
- removeLast () – Trả về và xóa phần tử cuối cùng của deque. Nếu deque trống thì ném một ngoại lệ.
- pollFirst () – Trả về và loại bỏ phần tử đầu tiên của deque. Trả về null nếu deque trống.
- 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.
5. Deque trong cấu trúc dữ liệu stack
Class Stack của Collections framework trong Java triển khai stack.
Tuy nhiên, nên sử dụng Deque làm stack thay vì dùng class Stack . Đó là bởi vì các hàm trong Stack đều được đồng bộ hóa.
Dưới đây là các hàm mà Deque interface cung cấp để thực hiện stack:
- push() – thêm một phần tử ở đầu deque
- pop() – loại bỏ một phần tử ở đầu deque
- peek() – trả về một phần tử ở đầu deque
6. Triển khai Deque trong Class ArrayDeque
/**
* 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.Deque;
import java.util.ArrayDeque;
class Main {
public static void main(String[] args) {
// Creating Deque using the ArrayDeque class
Deque<Integer> numbers = new ArrayDeque<>();
// add elements to the Deque
numbers.offer(1);
numbers.offerLast(2);
numbers.offerFirst(3);
System.out.println("Deque: " + numbers);
// Access elements of the Deque
int firstElement = numbers.peekFirst();
System.out.println("First Element: " + firstElement);
int lastElement = numbers.peekLast();
System.out.println("Last Element: " + lastElement);
// Remove elements from the Deque
int removedNumber1 = numbers.pollFirst();
System.out.println("Removed First Element: " + removedNumber1);
int removedNumber2 = numbers.pollLast();
System.out.println("Removed Last Element: " + removedNumber2);
System.out.println("Updated Deque: " + numbers);
}
}
Kết quả
Deque: [3, 1, 2]
First Element: 3
Last Element: 2
Removed First Element: 3
Removed Last Element: 2
Updated Deque: [1]
Để tìm hiểu thêm, hãy truy cập ArrayDeque trong Java.