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

Cách dùng containsAll() trong CopyOnWriteArraySet Android

Tìm hiểu CopyOnWriteArraySet

CopyOnWriteArraySet là một tập hợp (Set) an toàn cho luồng, được hỗ trợ bởi một CopyOnWriteArrayList bên dưới. Nó không cho phép các phần tử trùng lặp và phù hợp cho các kịch bản đọc nhiều, ghi ít.

Ví dụ: Kiểm tra sự tồn tại của nhiều phần tử với containsAll()

Phương thức containsAll(Collection<?> c) trả về true nếu tập hợp chứa tất cả các phần tử trong collection được truyền vào.

Bước 1: Tạo dự án

Tạo project mới trong Android Studio (File → New Project).

Bước 2: 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:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/actionEvent"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginTop="30dp"
        android:textSize="40sp" />

</LinearLayout>

Bước 3: Logic chính (MainActivity.java)

package com.example.myapplication;

import android.os.Build;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;
import java.util.Arrays;
import java.util.concurrent.CopyOnWriteArraySet;

public class MainActivity extends AppCompatActivity {

    private CopyOnWriteArraySet<String> copyOnWriteArraySet;

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

        copyOnWriteArraySet = new CopyOnWriteArraySet<>();
        final TextView actionEvent = findViewById(R.id.actionEvent);

        // Thêm phần tử (trùng lặp "ram" sẽ bị bỏ qua)
        copyOnWriteArraySet.add("sai");
        copyOnWriteArraySet.add("ram");
        copyOnWriteArraySet.add("krishna");
        copyOnWriteArraySet.add("prasad");
        copyOnWriteArraySet.add("ram");

        actionEvent.setText(copyOnWriteArraySet.toString());

        // Xử lý sự kiện click để kiểm tra containsAll
        actionEvent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String[] strings = {"krishna", "ram"};
                boolean result = copyOnWriteArraySet.containsAll(Arrays.asList(strings));
                actionEvent.setText("Kết quả containsAll: " + result); // true
            }
        });
    }
}

Kết quả

  • Lần đầu: Hiển thị set [sai, ram, krishna, prasad] (không trùng lặp).
  • Sau khi click TextView: Hiển thị Kết quả containsAll: true vì cả "krishna" và "ram" đều có trong set.