Các Phương Thức Trong Collections Thao Tác Với Đối Tượng Deque Và Queue

Các phương thức này cung cấp cách chuyển đổi giữa Deque và Queue, đồng thời đảm bảo tính an toàn kiểu cho các thao tác trên hàng đợi. Dưới đây là hai phương thức thao tác với các đối tượng Deque và Queue của lớp Collections trong Java:

↳ static <T> Queue<T> asLifoQueue(Deque<T> deque): Tạo một view của Deque dưới dạng Last-in-first-out (Lifo) Queue. Điều này có nghĩa là phần tử cuối cùng được thêm vào sẽ là phần tử đầu tiên được lấy ra.

↳ static <E> Queue<E> checkedQueue(Queue<E> queue, Class<E> type): Trả về một view kiểu an toàn động của hàng đợi đã cho. Điều này có nghĩa là các phần tử được thêm vào hoặc lấy ra từ hàng đợi phải tuân theo kiểu đã chỉ định.

Lưu ý:

↳ Deque là một giao diện cho các cấu trúc dữ liệu dạng hàng đợi có thể thêm và xóa phần tử từ cả đầu và cuối.

↳ Queue là một giao diện cho các cấu trúc dữ liệu dạng hàng đợi chỉ cho phép thêm phần tử vào cuối và lấy phần tử ra từ đầu.

Dưới đây là ví dụ minh họa cho phương thức asLifoQueue(Deque<T> deque)

Ví dụ: Example.java

import java.util.ArrayDeque;
import java.util.Collections;
import java.util.Deque;
import java.util.Queue;

public class Example {
    public static void main(String[] args) {
        Deque<String> deque = new ArrayDeque<>();
        deque.add("First");
        deque.add("Second");
        deque.add("Third");

        // Tạo view dưới dạng LIFO Queue
        Queue<String> lifoQueue = Collections.asLifoQueue(deque);

        // Xử lý các phần tử theo LIFO
        System.out.println(lifoQueue.poll()); // Output: Third
        System.out.println(lifoQueue.poll()); // Output: Second
        System.out.println(lifoQueue.poll()); // Output: First
    }
}

Kết quả của chương trình là:

First
Second
Third

Dưới đây là ví dụ minh họa phương thức checkedQueue(Queue<E> queue, Class<E> type)

Ví dụ: Example.java

import java.util.Collections;
import java.util.LinkedList;
import java.util.Queue;

public class Example {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        Queue<String> checkedQueue = Collections.checkedQueue(queue, String.class);

        checkedQueue.add("Hello");
        checkedQueue.add("World");

        // checkedQueue.add(123); // Lỗi biên dịch: 123 không phải là String

        System.out.println(checkedQueue.poll()); // Output: Hello
        System.out.println(checkedQueue.poll()); // Output: World
    }
}

Kết quả của chương trình là:

Hello
World

Trong ví dụ này, checkedQueue tạo ra một view an toàn kiểu động của hàng đợi queue. Điều này ngăn không cho các phần tử không đúng kiểu (không phải String) được thêm vào hàng đợi.

Cả hai ví dụ trên đều minh họa cách sử dụng các phương thức asLifoQueue và checkedQueue để quản lý hàng đợi trong Java. Phương thức asLifoQueue chuyển đổi một Deque thành hàng đợi LIFO, còn checkedQueue đảm bảo rằng chỉ các phần tử có kiểu cụ thể mới có thể được thêm vào hàng đợi.

Như vậy, chúng ta đã tìm hiểu các phương thức chính trong lớp Collections dành riêng cho các đối tượng Deque và Queue. Mặc dù Collections cung cấp ít phương thức hơn cho các đối tượng này so với List, nhưng các phương thức như tạo ra hàng đợi đồng bộ (synchronized) vẫn đóng vai trò quan trọng trong việc đảm bảo an toàn đa luồng. Nắm vững các phương thức này sẽ giúp bạn tối ưu hóa việc quản lý dữ liệu trong các tình huống đòi hỏi tính đồng bộ và hiệu quả của hàng đợi.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”