Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Android ListView에서 ArrayList 중복 제거하는 방법 (Java 코드 예제)

개요

이 튜토리얼에서는 Android 앱에서 ListView에 연결된 ArrayList의 중복 데이터를 제거하는 방법을 단계별로 살펴봅니다. 사용자가 입력한 이름을 ArrayList에 저장하면서 HashSet을 활용해 중복 항목을 자동으로 걸러내는 실전 예제입니다.

1단계: 새 프로젝트 생성

Android Studio를 실행한 뒤 File → New Project 메뉴로 이동하여 필요한 정보를 모두 입력하고 새 프로젝트를 생성합니다.

2단계: 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
   xmlns:tools = "https://schemas.android.com/tools"
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   tools:context = ".MainActivity"
   android:orientation = "vertical">
   <EditText
      android:id = "@+id/name"
      android:layout_width = "match_parent"
      android:hint = "Enter Name"
      android:layout_height = "wrap_content" />
   <LinearLayout
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content">
      <Button
         android:id = "@+id/save"
         android:text = "Save"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content" />
      <Button
         android:id = "@+id/refresh"
         android:text = "Refresh"
         android:layout_width = "wrap_content"
         android:layout_height = "wrap_content" />
   </LinearLayout>
   <ListView
      android:id = "@+id/listView"
      android:layout_width = "match_parent"
      android:layout_height = "wrap_content">
   </ListView>
</LinearLayout>

위 레이아웃은 세 부분으로 구성됩니다. 이름을 입력받는 EditText, 데이터 저장과 목록 갱신을 담당하는 두 개의 버튼(Save, Refresh), 그리고 결과를 표시하는 ListView입니다. 사용자가 Save 버튼을 누르면 입력한 이름이 ArrayList에 저장되고, Refresh 버튼을 누르면 ListView에 변경 사항이 반영됩니다.

3단계: MainActivity 작성

src/MainActivity.java 파일에 아래 코드를 추가합니다.

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.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashSet;
public class MainActivity extends AppCompatActivity {
   Button save, refresh;
   EditText name;
   ArrayAdapter arrayAdapter;
   ArrayList<String>array_list;
   private ListView listView;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      array_list =new ArrayList<>();
      name = findViewById(R.id.name);
      listView = findViewById(R.id.listView);
      findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            arrayAdapter.notifyDataSetChanged();
            listView.invalidateViews();
            listView.refreshDrawableState();
         }
      });
      findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            if (!name.getText().toString().isEmpty()) {
               array_list.add(name.getText().toString());
               HashSet hs = new HashSet();
               hs.addAll(array_list);
               array_list.clear();
               array_list.addAll(hs);
               arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array_list);
               listView.setAdapter(arrayAdapter);
               Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
            } else {
               name.setError("Enter NAME");
            }
         }
      });
   }
}

핵심 로직 살펴보기

중복 제거의 핵심은 바로 이 코드 부분입니다.

HashSet hs = new HashSet();
hs.addAll(array_list);  // ArrayList → HashSet (중복 자동 제거)
array_list.clear();     // 기존 리스트 비우기
array_list.addAll(hs);  // 중복 제거된 데이터 되돌리기

HashSet은 내부적으로 동일한 요소를 하나만 저장하는 자료구조입니다. 따라서 ArrayList의 모든 요소를 HashSet에 옮겼다가 다시 ArrayList로 복원하면, 중복된 값이 자연스럽게 걸러집니다. 또한 입력값이 비어 있으면 setError()로 사용자에게 경고를 표시하고, 저장이 성공하면 Toast 메시지로 피드백을 줍니다.

앱 실행 및 결과 확인

실제 Android 기기를 컴퓨터에 연결한 상태에서 Android Studio 상단 툴바의 Run(실행) 아이콘을 클릭합니다. 실행할 기기를 선택하면 모바일 화면에 앱의 기본 화면이 표시됩니다.

Android ListView에서 ArrayList 중복 제거하는 방법 (Java 코드 예제)

실행 결과를 보면, 같은 이름을 여러 번 입력해도 Toast 메시지는 매번 표시되지만 ArrayList에는 한 번만 저장되어 ListView에 중복 없이 깔끔하게 나타나는 것을 확인할 수 있습니다.

참고: 입력 순서를 유지하려면?

HashSet은 요소의 순서를 보장하지 않기 때문에, 중복 제거 후 목록 순서가 뒤섞일 수 있습니다. 입력 순서를 그대로 유지하면서 중복을 제거하고 싶다면 LinkedHashSet을 사용하세요.

java.util.Set<String> hs = new java.util.LinkedHashSet<>(array_list);
array_list.clear();
array_list.addAll(hs);

이렇게 하면 중복은 제거되면서도 처음 입력된 순서가 그대로 유지되어 더 자연스러운 목록을 만들 수 있습니다.