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ềfalsenếu item đã tồn tại → đó là phần tử trùng- Chỉ thêm vào
duplicateskhi 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.

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()