Lớp ArrayDeque trong Java: Hướng Dẫn Cho Người Mới Bắt Đầu

Giới Thiệu

Xin chào, những phù thủy Java tương lai! Hôm nay, chúng ta sẽ bắt đầu hành trình thú vị vào thế giới của lớp ArrayDeque trong Java. Bây giờ, tôi biết bạn có thể đang suy nghĩ: "Deque? Đây là từ tiếng Pháp sang chả?" Không phải! Trong thế giới lập trình, deque (phát âm là "deck") đại diện cho hàng đợi hai đầu. Nó giống như hàng chờ ở trò chơi vui vẻ đó nơi mà mọi người có thể tham gia hoặc rời khỏi từ cả hai đầu. Cool, phải không?

Java -  ArrayDeque

ArrayDeque là việc triển khai của giao diện Deque trong Java, và đó là một công cụ mạnh mẽ trong bộ công cụ lập trình của bạn. Nó như một cây dao Thụy Sĩ cho lưu trữ và xử lý dữ liệu. Vậy hãy cùng nhau mặc vào vòng cổ và bắt đầu!

Khai Báo Lớp ArrayDeque

Trước khi chúng ta bắt đầu sử dụng ArrayDeque, chúng ta cần biết cách khai báo nó. Thật đơn giản. Dưới đây là cách bạn làm như vậy:

import java.util.ArrayDeque;

ArrayDeque<Integer> numbers = new ArrayDeque<Integer>();

Trong ví dụ này, chúng ta đang tạo một ArrayDeque sẽ lưu trữ các đối tượng Integer. Nhưng đừng lo lắng, ArrayDeque rất linh hoạt - bạn có thể sử dụng nó với bất kỳ loại đối tượng nào!

Các Hàm Khởi Tạo Của Lớp ArrayDeque

ArrayDeque có ba hàm khởi tạo. Hãy tưởng tượng các hàm khởi tạo là những cách khác nhau để xây dựng deque của bạn:

  1. ArrayDeque(): Điều này tạo ra một deque trống với khả năng ban đầu là 16 phần tử.
  2. ArrayDeque(int numElements): Điều này tạo ra một deque với khả năng ban đầu được xác định.
  3. ArrayDeque(Collection<? extends E> c): Điều này tạo ra một deque chứa các phần tử của tập hợp được xác định.

Hãy xem những điều này trong hành động:

// Hàm khởi tạo mặc định
ArrayDeque<String> fruits1 = new ArrayDeque<>();

// Hàm khởi tạo với khả năng ban đầu
ArrayDeque<String> fruits2 = new ArrayDeque<>(20);

// Hàm khởi tạo với một tập hợp
ArrayList<String> fruitList = new ArrayList<>();
fruitList.add("Táo");
fruitList.add("Chuối");
ArrayDeque<String> fruits3 = new ArrayDeque<>(fruitList);

Các Phương Thức Của Lớp ArrayDeque

Bây giờ, hãy xem một số phương thức thường được sử dụng trong ArrayDeque. Tôi thích nghĩ về các phương thức này như những chiêu năng tưởng tượng mà cây dao Thụy Sĩ của bạn có thể thực hiện.

Phương Thức Mô Tả
addFirst(E e) Thêm phần tử vào đầu deque
addLast(E e) Thêm phần tử vào cuối deque
offerFirst(E e) Thêm phần tử vào đầu deque (trả về boolean)
offerLast(E e) Thêm phần tử vào cuối deque (trả về boolean)
removeFirst() Loại bỏ và trả về phần tử đầu tiên
removeLast() Loại bỏ và trả về phần tử cuối cùng
pollFirst() Loại bỏ và trả về phần tử đầu tiên (hoặc null nếu trống)
pollLast() Loại bỏ và trả về phần tử cuối cùng (hoặc null nếu trống)
getFirst() Trả về phần tử đầu tiên mà không loại bỏ
getLast() Trả về phần tử cuối cùng mà không loại bỏ
peekFirst() Trả về phần tử đầu tiên mà không loại bỏ (hoặc null nếu trống)
peekLast() Trả về phần tử cuối cùng mà không loại bỏ (hoặc null nếu trống)

Ví Dụ Thêm Và Loại Bỏ Phần Tử Khỏi ArrayDeque

Hãy đặt kiến thức mới nhận được vào sử dụng với một ví dụ thực tế. Tưởng tượng chúng ta đang quản lý danh sách công việc nơi các nhiệm vụ có thể được thêm hoặc loại bỏ từ cả hai đầu.

import java.util.ArrayDeque;

public class ToDoList {
public static void main(String[] args) {
ArrayDeque<String> tasks = new ArrayDeque<>();

// Thêm các nhiệm vụ
tasks.addFirst("Thức dậy");
tasks.addLast("Rửa răng");
tasks.offerFirst("Đặt báo thức");
tasks.offerLast("Đi ngủ");

System.out.println("Công việc hiện tại: " + tasks);

// Loại bỏ các nhiệm vụ
String firstTask = tasks.removeFirst();
String lastTask = tasks.removeLast();

System.out.println("Hoàn thành nhiệm vụ đầu tiên: " + firstTask);
System.out.println("Hoàn thành nhiệm vụ cuối cùng: " + lastTask);
System.out.println("Công việc còn lại: " + tasks);

// Nhìn thấy các nhiệm vụ
String nextTask = tasks.peekFirst();
String finalTask = tasks.peekLast();

System.out.println("Nhiệm vụ tiếp theo: " + nextTask);
System.out.println("Nhiệm vụ cuối cùng: " + finalTask);
}
}

Hãy phân tích điều này:

  1. Chúng ta bắt đầu bằng cách tạo một ArrayDeque có tên là tasks.
  2. Chúng ta thêm các nhiệm vụ bằng cách sử dụng addFirst(), addLast(), offerFirst(), và offerLast(). Nhận ra rằng chúng ta có thể thêm các nhiệm vụ vào cả hai đầu của deque.
  3. Chúng ta sau đó loại bỏ các nhiệm vụ từ cả hai đầu bằng cách sử dụng removeFirst()removeLast().
  4. Cuối cùng, chúng ta nhìn thấy các nhiệm vụ đầu tiên và cuối cùng mà không loại bỏ bằng cách sử dụng peekFirst()peekLast().

Đầu Ra

Khi bạn chạy mã này, bạn sẽ thấy cái như sau:

Công việc hiện tại: [Đặt báo thức, Thức dậy, Rửa răng, Đi ngủ]
Hoàn thành nhiệm vụ đầu tiên: Đặt báo thức
Hoàn thành nhiệm vụ cuối cùng: Đi ngủ
Công việc còn lại: [Thức dậy, Rửa răng]
Nhiệm vụ tiếp theo: Thức dậy
Nhiệm vụ cuối cùng: Rửa răng

Và đó là như vậy! Bạn vừa tạo, thao tác và khám phá một ArrayDeque. Rất thú vị, phải không?

Hãy nhớ, luyện tập là chìa khóa. Thử tạo ra ArrayDeque của riêng bạn và thử nghiệm với các phương thức khác nhau. Bạn có thể tạo một trình quản lý danh sách phát nhạc, một công cụ theo dõi lịch sử trình duyệt hoặc thậm chí là một hệ thống undo/redo đơn giản!

ArrayDeque như một người bạn tốt - luôn ở đây khi bạn cần, sẵn sàng giúp đỡ từ cả hai bên. Vì vậy đừng ngần ngại, hãy làm quen với nó hơn nữa và sớm bạn sẽ deque-ing như một chuyên gia!

Chúc mừng mãi mãi, những phù thủy Java tương lai! ??

Credits: Image by storyset