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

Android에서 LinkedHashSet(연결된 해시 집합) 사용하는 방법 완벽 가이드

이 예제는 Android 앱에서 LinkedHashSet(연결된 해시 집합)을 사용하는 방법을 보여줍니다. LinkedHashSet은 중복을 허용하지 않으면서도 요소가 삽입된 순서를 그대로 유지하는 자료구조입니다. 이 튜토리얼에서는 사용자가 입력한 이름을 LinkedHashSet에 저장하고, 이를 ArrayList에 담아 ListView로 화면에 출력하는 간단한 앱을 만들어 보겠습니다.

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"
   android:orientation="vertical">

   <EditText
      android:id="@+id/name"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:hint="Enter Name" />

   <LinearLayout
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:orientation="horizontal">

      <Button
         android:id="@+id/save"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Save" />

      <Button
         android:id="@+id/refresh"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Refresh" />

   </LinearLayout>

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

</LinearLayout>

위 코드는 이름을 입력받는 EditText와 데이터를 저장하는 Save 버튼, 목록을 갱신하는 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.EditText;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

   EditText name;
   ArrayAdapter arrayAdapter;
   ArrayList<String> array_list;
   Set set = new LinkedHashSet();
   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()) {
               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");
            }
         }
      });
   }
}

코드 설명

위 코드의 핵심 동작 방식은 다음과 같습니다.

  • LinkedHashSet 선언: Set set = new LinkedHashSet();으로 집합을 생성합니다. LinkedHashSet은 HashSet과 달리 요소의 삽입 순서를 유지하며, 동일한 값의 중복 저장을 자동으로 방지합니다.
  • Save 버튼 클릭 시: 입력 필드가 비어 있지 않은지 확인한 후, 입력된 이름을 LinkedHashSet에 추가합니다. 이후 기존 ArrayList를 비우고(set.clear → addAll) 집합의 내용을 다시 복사하여 어댑터를 통해 ListView에 표시합니다.
  • Refresh 버튼 클릭 시: notifyDataSetChanged(), invalidateViews(), refreshDrawableState()를 호출하여 ListView의 화면을 최신 상태로 갱신합니다.
  • 유효성 검사: 이름이 입력되지 않은 상태에서 저장 버튼을 누르면 setError()를 통해 사용자에게 오류 메시지를 표시합니다.

앱 실행하기

이제 애플리케이션을 실행해 보겠습니다. 실제 Android 모바일 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 아이콘을 클릭하세요. 실행 옵션에서 본인의 모바일 기기를 선택하면, 기기 화면에 아래와 같은 기본 화면이 표시됩니다.

Android에서 LinkedHashSet(연결된 해시 집합) 사용하는 방법 완벽 가이드

실행 결과를 보면, 입력한 이름들이 LinkedHashSet을 거쳐 ArrayList에 저장되고 ListView에 순서대로 표시되는 것을 확인할 수 있습니다. 같은 이름을 여러 번 입력해도 중복 없이 한 번만 저장되는 점이 LinkedHashSet 사용의 핵심 장점입니다.