Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách thêm phần tử theo chỉ số trong CopyOnWriteArrayList Android

Giới thiệu về CopyOnWriteArrayList

CopyOnWriteArrayList là biến thể thread-safe của ArrayList. Các thao tác ghi (add, set, remove...) tạo bản sao mới của mảng nội bộ. Phù hợp khi đọc nhiều, ghi ít, và cần duyệt an toàn mà không cần khóa.

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.CopyOnWriteArrayList;

public class MainActivity extends AppCompatActivity {
    CopyOnWriteArrayList<String> copyOnWriteArrayList;

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        copyOnWriteArrayList = new CopyOnWriteArrayList<>();
        final TextView actionEvent = findViewById(R.id.actionEvent);

        // Thêm phần tử mẫu
        copyOnWriteArrayList.add("sai");
        copyOnWriteArrayList.add("ram");
        copyOnWriteArrayList.add("krishna");
        copyOnWriteArrayList.add("prasad");
        copyOnWriteArrayList.add("ram"); // Cho phép trùng lặp

        actionEvent.setText(copyOnWriteArrayList.toString());

        actionEvent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Thêm "phần tử đầu" tại chỉ số 0 (chèn vào đầu)
                copyOnWriteArrayList.add(0, "phần tử đầu");
                actionEvent.setText(copyOnWriteArrayList.toString());
            }
        });
    }
}

Chạy ứng dụng

Kết nối thiết bị Android (API 21+) và chạy ứng dụng.

Cách thêm phần tử theo chỉ số trong CopyOnWriteArrayList Android

Nhấn vào TextView để chèn phần tử tại chỉ số 0:

Cách thêm phần tử theo chỉ số trong CopyOnWriteArrayList Android

Đặc điểm quan trọng:
  • add(index, element) chèn phần tử tại vị trí chỉ định, đẩy các phần tử sau về sau
  • Mỗi lần ghi tạo bản sao mảng mới → tốn bộ nhớ nếu ghi nhiều
  • Duyệt (iterator) không ném ConcurrentModificationException và thấy snapshot tại thời điểm tạo iterator
  • Phù hợp cho danh sách observer, cache, cấu hình ít thay đổi