Giới thiệu về ConcurrentLinkedDeque
ConcurrentLinkedDeque là deque không giới hạn, an toàn cho đa luồng, dựa trên nút liên kết. Phần tử "đầu tiên" (first) là phần tử ở đầu deque (head). Yêu cầu API 21+.
Bước 1: Tạo dự án mới
Mở Android Studio, chọn File → New Project, điền thông tin cần thiết.
Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<TextView
android:id="@+id/actionEvent"
android:textSize="40sp"
android:layout_marginTop="30dp"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
Bước 3: Viết logic (src/MainActivity.java)
package com.example.myapplication;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.concurrent.ConcurrentLinkedDeque;
public class MainActivity extends AppCompatActivity {
ConcurrentLinkedDeque<String> concurrentLinkedDeque;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
concurrentLinkedDeque = new ConcurrentLinkedDeque<>();
final TextView actionEvent = findViewById(R.id.actionEvent);
// Thêm phần tử mẫu
concurrentLinkedDeque.add("sai");
concurrentLinkedDeque.add("ram");
concurrentLinkedDeque.add("krishna");
concurrentLinkedDeque.add("prasad");
actionEvent.setText(concurrentLinkedDeque.toString());
actionEvent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Lấy phần tử đầu tiên (first/head) - KHÔNG xóa
String first = concurrentLinkedDeque.getFirst();
actionEvent.setText("First: " + first);
}
});
}
}
Chạy ứng dụng
Kết nối thiết bị (API 21+) và chạy ứng dụng.

Nhấn vào TextView để lấy phần tử đầu:

So sánh các phương thức lấy đầu:getFirst() tương đương
Phương thức Hành vi Khi rỗng getFirst()Lấy đầu, KHÔNG xóa Ném NoSuchElementExceptionpeekFirst()Lấy đầu, KHÔNG xóa Trả về nullpollFirst()Lấy VÀ xóa đầu Trả về nullremoveFirst()Lấy VÀ xóa đầu Ném NoSuchElementExceptionelement()của Queue. Nên dùngpeekFirst()để an toàn hơn.