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

Tìm giá trị trùng lặp trong ArrayList<String> và lưu vào danh sách khác - Android

Mục tiêu

Lọc ra các phần tử xuất hiện nhiều hơn 1 lần trong ArrayList và lưu chúng vào một ArrayList mới.

Giải thuật

Sử dụng HashSet để theo dõi các phần tử đã gặp. Duyệt qua list gốc: nếu phần tử đã có trong Set → là trùng lặp → thêm vào list kết quả.

Các bước thực hiện

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

Android Studio → File → New Project → Empty Activity.

Bước 2: Layout đơn giản với ListView (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listViewDuplicates"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Bước 3: Code MainActivity.java

package com.example.findduplicates;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

    private ListView listView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = findViewById(R.id.listViewDuplicates);

        // Dữ liệu mẫu có trùng lặp
        ArrayList<String> mainList = new ArrayList<>();
        mainList.add("Sai");
        mainList.add("Sai");           // trùng
        mainList.add("Ram");
        mainList.add("Sai Krishna");
        mainList.add("Sai Ram Krishna");
        mainList.add("tutorialspoint.com");
        mainList.add("tutorialspoint.com"); // trùng

        // Tìm phần tử trùng lặp
        Set<String> seen = new HashSet<>();
        ArrayList<String> duplicates = new ArrayList<>();

        for (String item : mainList) {
            if (!seen.add(item)) { // add() trả về false nếu đã tồn tại
                duplicates.add(item);
            }
        }

        // Hiển thị kết quả
        ArrayAdapter<String> adapter = new ArrayAdapter<>(
            this, android.R.layout.simple_list_item_1, duplicates);
        listView.setAdapter(adapter);
    }
}

Giải thích code

  • Set<String> seen = new HashSet<>(): Set không cho phép trùng lặp, lookup O(1)
  • seen.add(item) trả về false nếu item đã tồn tại → đó là phần tử trùng
  • Chỉ thêm vào duplicates khi phát hiện trùng (đảm bảo mỗi giá trị trùng chỉ xuất hiện 1 lần trong kết quả)

Kết quả

ListView hiển thị: "Sai" và "tutorialspoint.com" - hai giá trị bị trùng trong list gốc.

Tìm giá trị trùng lặp trong ArrayList<String> và lưu vào danh sách khác - Android

Mở rộng

  • Đếm số lần xuất hiện: dùng Map<String, Integer> thay vì Set
  • Loại bỏ trùng lặp hoàn toàn (giữ unique): new ArrayList<>(new HashSet<>(mainList))
  • Với object phức tạp: override equals() và hashCode()