이 예제는 안드로이드에서 TreeMap에 저장된 데이터를 ArrayList로 옮겨 ListView에 표시하는 방법을 다룹니다. TreeMap은 키를 기준으로 자동 정렬되기 때문에, 데이터를 정렬된 상태로 리스트뷰에 보여주고 싶을 때 유용하게 활용할 수 있습니다.
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/record"
android:layout_width="match_parent"
android:hint="record number"
android:inputType="number"
android:layout_height="wrap_content" />
<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 버튼을 누르면 해당 데이터가 TreeMap에 저장되고, 이후 TreeMap의 값들이 ArrayList로 옮겨져 리스트뷰에 표시됩니다. Refresh 버튼을 누르면 리스트뷰의 변경 사항을 갱신할 수 있습니다.
3단계: 메인 액티비티 작성 (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.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
public class MainActivity extends AppCompatActivity {
Button save, refresh;
EditText name, record;
ArrayAdapter arrayAdapter;
ArrayList<String> array_list;
Map map = new TreeMap();
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);
record = findViewById(R.id.record);
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() && !record.getText().toString().isEmpty()) {
map.put(record.getText().toString(), name.getText().toString());
array_list.clear();
array_list.addAll(map.values());
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");
record.setError("Enter Record");
}
}
});
}
}코드 동작 원리
Save 버튼 클릭 시 동작 흐름은 다음과 같습니다.
1. 입력값 검증: 이름과 레코드 번호 필드가 비어 있는지 확인합니다. 비어 있다면 각 EditText에 에러 메시지를 표시합니다.
2. TreeMap에 데이터 저장: map.put(record, name)을 호출하여 레코드 번호를 키(key), 이름을 값(value)으로 저장합니다. TreeMap이므로 키를 기준으로 오름차순 정렬이 자동으로 유지됩니다.
3. TreeMap → ArrayList 변환: array_list.clear()로 기존 목록을 비운 뒤, array_list.addAll(map.values())로 TreeMap의 모든 값을 ArrayList에 추가합니다. 이 과정 덕분에 ArrayList는 항상 정렬된 최신 데이터를 유지합니다.
4. 어댑터 설정 및 화면 갱신: ArrayAdapter를 새로 생성하여 ListView에 연결하고, "Inserted"라는 토스트 메시지를 통해 저장 완료를 알려줍니다.
Refresh 버튼을 누르면 notifyDataSetChanged(), invalidateViews(), refreshDrawableState()를 차례로 호출하여 리스트뷰를 강제로 다시 그립니다.
앱 실행 및 결과 확인
애플리케이션을 실행해 보겠습니다. 실제 안드로이드 스마트폰을 컴퓨터에 연결한 상태라고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 열고 툴바의 Run 아이콘을 클릭한 뒤, 실행 옵션에서 본인의 모바일 기기를 선택하세요. 이후 모바일 기기에서 앱의 기본 화면을 확인할 수 있습니다.

위 결과에서 확인할 수 있듯이, 사용자가 입력한 이름 데이터가 TreeMap을 거쳐 ArrayList로 전달되고, 정렬된 형태로 리스트뷰에 표시됩니다. 이처럼 TreeMap과 ArrayList를 조합하면 키 기준 정렬이 필요한 목록 화면을 손쉽게 구현할 수 있습니다.