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

Cách loại bỏ trùng lặp ArrayList dùng LinkedHashSet cho ListView Android

Giới thiệu

LinkedHashSet giữ thứ tự thêm vào (insertion order) và không cho trùng lặp. Khác TreeSet không sắp xếp.

Bước 1-2: Project & Giao diện

Giống TreeSet: EditText, Button Lưu/Làm mới, ListView.

Bước 3: MainActivity.java - dùng LinkedHashSet

package com.example.andy.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.LinkedHashSet;

public class MainActivity extends AppCompatActivity {
    EditText name;
    ListView listView;
    ArrayList array_list = new ArrayList<>();
    ArrayAdapter arrayAdapter;

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

        name = findViewById(R.id.name);
        listView = findViewById(R.id.listView);
        arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, array_list);
        listView.setAdapter(arrayAdapter);

        findViewById(R.id.refresh).setOnClickListener(v -> arrayAdapter.notifyDataSetChanged());

        findViewById(R.id.save).setOnClickListener(v -> {
            String input = name.getText().toString();
            if (input.isEmpty()) { name.setError("Nhập tên"); return; }

            array_list.add(input);

            // Loại trùng, giữ nguyên thứ tự nhập
            LinkedHashSet lhs = new LinkedHashSet<>(array_list);
            array_list.clear();
            array_list.addAll(lhs);

            arrayAdapter.notifyDataSetChanged();
            Toast.makeText(this, "Đã thêm (giữ thứ tự, không trùng)", Toast.LENGTH_LONG).show();
        });
    }
}

So sánh 3 Set

SetTrùng lặpThứ tựSắp xếp
HashSetKhôngKhông đảm bảoKhông
LinkedHashSetKhôngGiữ thứ tự thêmKhông
TreeSetKhôngSắp xếp tự nhiênCó

Chạy ứng dụng

Danh sách giữ thứ tự nhập đầu tiên, không có bản sao.

Cách loại bỏ trùng lặp ArrayList dùng LinkedHashSet cho ListView Android