Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีตรวจสอบว่ามีองค์ประกอบใน ConcurrentLinkedDeque บน Android

บทนำ

ConcurrentLinkedDeque เป็นคิวแบบ Deque (Double-ended Queue) ที่ไม่มีขีดจำกัดขนาด (unbounded) สร้างบนโครงสร้าง Linked Nodes รองรับการเข้าถึงจากหลายเธรดพร้อมกันได้อย่างปลอดภัย (Thread-safe) เหมาะสำหรับโปรแกรมแบบ Compliance หรือ Multithreading

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

เปิด Android Studio เลือก File → New Project กรอกข้อมูลที่จำเป็น

ขั้นตอนที่ 2: ออกแบบ Layout (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>

ใช้ TextView เดียวแสดงเนื้อหา ConcurrentLinkedDeque และรับการคลิกเพื่อตรวจสอบค่า

ขั้นตอนที่ 3: เขียนโค้ด Java (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);

        // เพิ่มข้อมูลตัวอย่าง
        concurrentLinkedDeque.add("sai");
        concurrentLinkedDeque.add("ram");
        concurrentLinkedDeque.add("krishna");
        concurrentLinkedDeque.add("prasad");

        // แสดงข้อมูลเริ่มต้น
        actionEvent.setText("" + concurrentLinkedDeque);

        // คลิกเพื่อตรวจสอบว่ามี "krishna" หรือไม่
        actionEvent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean contains = concurrentLinkedDeque.contains("krishna");
                actionEvent.setText("" + contains); // แสดง true/false
            }
        });
    }
}

การทดสอบแอปพลิเคชัน

รันแอปบนอุปกรณ์จริง จะเห็น TextView แสดงเนื้อหา Deque เริ่มต้น

วิธีตรวจสอบว่ามีองค์ประกอบใน ConcurrentLinkedDeque บน Android

คลิกที่ TextView จะแสดงผล true (เพราะ "krishna" มีอยู่ใน Deque)

วิธีตรวจสอบว่ามีองค์ประกอบใน ConcurrentLinkedDeque บน Android

คำอธิบายเพิ่มเติม

  • contains(Object o) คืนค่า true หากพบองค์ประกอบที่ระบุใน Deque, มิฉะนั้น false
  • ConcurrentLinkedDeque ใช้งานได้ใน API Level 21 (Lollipop) ขึ้นไป - ต้องมี @RequiresApi
  • Thread-safe: เหมาะสำหรับ Producer-Consumer pattern หรือการแบ่งปันข้อมูลระหว่างเธรด
  • ไม่รองรับ null elements

เมธอดที่เกี่ยวข้องอื่นๆ

เมธอด คำอธิบาย
addFirst(E e) เพิ่มองค์ประกอบที่หัว Deque
addLast(E e) เพิ่มองค์ประกอบที่ท้าย Deque
getFirst() ดึงองค์ประกอบแรก (ไม่ลบ)
getLast() ดึงองค์ประกอบสุดท้าย (ไม่ลบ)
removeFirst() ลบและคืนค่าองค์ประกอบแรก
removeLast() ลบและคืนค่าองค์ประกอบสุดท้าย

สรุป

ใช้ ConcurrentLinkedDeque.contains() เพื่อตรวจสอบการมีอยู่ของข้อมูลใน Deque แบบ Thread-safe เหมาะสำหรับแอปที่มีการประมวลผลขนาน