안드로이드에서 HashSet 활용하기
이 예제는 안드로이드 앱에서 HashSet(해시 셋)을 사용하는 방법을 단계별로 보여줍니다. HashSet은 중복된 데이터를 자동으로 제거해 주는 자료구조로, 사용자 입력값을 저장할 때 유용하게 활용할 수 있습니다.
1단계: 새 프로젝트 생성
Android Studio를 실행하고 File ⇒ New Project 메뉴로 이동한 후, 새 프로젝트 생성에 필요한 모든 정보를 입력하여 프로젝트를 만듭니다.
2단계: 레이아웃 파일 작성 (res/layout/activity_main.xml)
아래 코드를 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가 포함되어 있습니다.
3단계: MainActivity 작성 (src/MainActivity.java)
다음으로 아래 코드를 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.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class MainActivity extends AppCompatActivity {
EditText name;
ArrayAdapter arrayAdapter;
ArrayList<String> array_list;
Set set = new HashSet<String>();
private ListView listView;
@Override
protected void onCreate(Bundle readdInstanceState) {
super.onCreate(readdInstanceState);
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()) {
set.add(name.getText().toString());
array_list.clear();
array_list.addAll(set);
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");
}
}
});
}
}코드 동작 원리
위 코드의 핵심 로직은 다음과 같습니다.
Save 버튼 클릭 시: 사용자가 입력한 이름이 비어 있지 않으면 set.add() 메서드를 통해 HashSet에 값을 추가합니다. 이때 이미 존재하는 값이라면 중복 없이 하나만 유지됩니다. 그런 다음 HashSet의 모든 요소를 ArrayList에 옮겨 담고, ArrayAdapter를 통해 ListView에 연결하여 화면에 표시합니다. 저장이 완료되면 "Inserted"라는 토스트 메시지가 나타납니다.
입력값이 비어 있는 경우: 이름을 입력하지 않고 Save 버튼을 누르면 setError()를 통해 "Enter NAME" 오류 메시지가 표시됩니다.
Refresh 버튼 클릭 시: notifyDataSetChanged(), invalidateViews(), refreshDrawableState()를 호출하여 ListView의 변경 사항을 즉시 화면에 반영합니다.
애플리케이션 실행 및 결과 확인
이제 애플리케이션을 실행해 보겠습니다. 실제 안드로이드 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바에서 Run 아이콘을 클릭하세요. 실행 옵션에서 본인의 모바일 기기를 선택하면, 기기 화면에 앱의 기본 화면이 나타납니다.

위 실행 결과에서 확인할 수 있듯이, 사용자가 입력한 이름들이 HashSet을 거쳐 ArrayList에 저장되고, 중복 없이 ListView에 표시되는 것을 볼 수 있습니다. 같은 이름을 여러 번 입력해도 목록에는 한 번만 나타나는 것이 HashSet 사용의 핵심 장점입니다.