본문 바로가기
프로그래밍

Java 컬렉션 ArrayList, HashMap, HashSet 깊이 알아보기

by 이음코드 2024. 12. 5.
반응형

Java의 컬렉션 프레임워크(Collection Framework)는 데이터를 효율적으로 관리하고 처리할 수 있도록 다양한 자료 구조와 인터페이스를 제공합니다.이 프레임워크는 데이터를 저장, 검색, 수정, 삭제 등의 작업을 손쉽게 수행할 수 있게 해줍니다. 이번 글에서는 Java의 주요 컬렉션인 ArrayList, HashMap, HashSet에 대해 설명하고, 각각의 사용 사례와 특징을 비교해 보겠습니다.

 

1. Java 컬렉션 프레임워크란?

Java 컬렉션 프레임워크는 데이터를 다루기 위한 표준화된 클래스와 인터페이스의 집합입니다. Java에서 데이터를 담기 위한 기본적인 컬렉션인 리스트, 셋, 맵 등의 다양한 자료 구조를 제공하며, 각 자료 구조는 효율적인 데이터 처리를 위한 특별한 목적과 특징을 가지고 있습니다.

  • List : 순서가 있는 데이터의 집합 (예 : ArrayList, LinkedList)
  • Set : 중복이 없는 데이터의 집합 (예 : HashSet, TreeSet)
  • Map : 키-값 쌍으로 이루어진 데이터의 집합 (예: HashMap,  TreeMap)

 

2. ArrayList

1) ArrayList 란?

ArrayList는 List 인터페이스를 구현한 클래스로, 순서가 있는 데이터를 관리하기 위해 사용됩니다. 내부적으로 배열을 사용하여 데이터를 저장하며, 크기가 동적으로 조정되는 특징을 가지고 있습니다. 중복된 요소를 허용하고, 데이터의 삽입 순서를 유지합니다.

 

2) 주요 특징

  • 동적 크기 조정 : 배열의 크기가 가득 차면 자동으로 크기가 늘어나며, 필요 시 줄어듭니다.
  • 인덱스를 통한 접근 : ArrayList는 배열과 같이 인덱스를 통해 빠르게 요소에 접근할 수 있습니다.
  • 중복 허용 : 동일한 요소를 여러 개 가질 수 있습니다.

3) 사용 사례

예를 들어 학생들의 명단을 관리할 때 ArrayList를 사용할 수 있습니다. 학생들의 이름을 추가하거나 삭제하고, 특정 인덱스의 학생을 검색하는 작업에 유리합니다.

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> students = new ArrayList<>();
        students.add("이음");
        students.add("코드");
        students.add("하얀이");

        // 학생 목록 출력
        for (String student : students) {
            System.out.println(student);
        }

        // 특정 인덱스의 학생 검색
        System.out.println("2번째 학생: " + students.get(1));
    }
}

 

4) 장단점

  • 장점 : 인덱스를 통한 빠른 접근, 동적 크기 조정
  • 단점 : 요소의 삽입이나 삭제 시, 특히 중간에 삽입할 때 느릴 수 있습니다. 이는 내부 배열을 이동시키는 작업이 필요하기 때문입니다.

3. HashSet

1) HashSet 이란?

HashSet은 Set 인터페이스를 구현한 클래스로, 중복되지 않는 데이터의 집합을 관리합니다. HashSet은 요소의 순서를 보장하지 않으며, 각 요소의 유일성을 보장합니다. 내부적으로 해시 테이블을 사용하여 요소를 저장하기 때문에 검색, 추가, 삭제가 매우 빠릅니다.

 

2) 주요 특징

  • 중복 허용하지 않음 : HashSet은 동일한 요소를 여러 개 저장할 수 없습니다.
  • 순서 없음 : 요소가 저장된 순서를 유지하지 않으며, 결과는 무작위로 출력될 수 있습니다.

3) 사용 사례

유일한 사용자 ID관리를 예를 들어보겠습니다. 중복을 허용하지 않는 데이터의 경우 HashSet이 유리합니다. 사용자 ID를 관리할 때 사용되면 중복되는 ID가 저장되지 않도록 보장할 수 있습니다.

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> userIds = new HashSet<>();
        userIds.add("userID1");
        userIds.add("userID2");
        userIds.add("userID1"); // 중복 추가 시도

        // 유일한 사용자 ID 목록 출력
        for (String id : userIds) {
            System.out.println(id);
        }
    }
}

 

4) 장단점

  • 장점 : 중복이 없는 데이터를 빠르게 관리, 검색, 추가 및 삭제가 효율적입니다.
  • 단점 : 순서를 유지하지 않기 때문에 데이터의 저장 순서가 중요하다면 사용하기 어렵습니다.

4. HashMap

1) HashMap 이란?

HashMap은 Map 인터페이스를 구현한 클래스로, 키-값 쌍(Key-Value Pair)을 저장하는데 사용됩니다. 각 키는 고유해야 하며, 값을 통해 데이터를 효율적으로 관리할 수 있습니다. 내부적으로 해시 테이블을 사용하여 데이터를 저장하고 빠르게 키를 검색할 수 있습니다.

 

2) 주요 특징

  • 키-값 쌍 저장 : 각 요소는 키와 값의 쌍으로 저장되며, 키는 중복될 수 없지만 값은 중복이 가능합니다.
  • 빠른 검색 : 키를 통해 빠르게 검색할 수 있습니다.

3) 사용 사례

예를 들어 제품 정보를 관리한다면 제품의 이름을 키로하고 가격을 값으로 저장하는 경우에 HashMap을 사용할 수 있습니다. 이를 통해 특정 제품의 가격을 빠르게 찾을 수 있습니다.

import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> productPrices = new HashMap<>();
        productPrices.put("티셔츠", 1500);
        productPrices.put("볼펜", 800);
        productPrices.put("공책", 400);

        // 특정 제품의 가격 검색
        System.out.println("티셔츠의 가격: " + productPrices.get("티셔츠"));

        // 모든 제품 정보 출력
        for (String product : productPrices.keySet()) {
            System.out.println(product + "의 가격: " + productPrices.get(product));
        }
    }
}

 

4) 장단점

  • 장점 : 키를 통한 빠른 검색 및 데이터 접근
  • 단점 : 순서가 보장되지 않으며 메모리 사용량이 많을 수 있습니다.

5. ArrayList, HashSet, HashMap의 비교

컬렉션 타입 주요 특징 중복 허용 순서 유지 사용 사례
ArrayList 순서가 있는 리스트 허용 유지 학생 명단, 리스트 관리
HashSet 중복이 없는 집합 허용하지 않음 유지하지 않음 유일한 ID관리
HashMap 키-값 쌍 저장 키는 허용하지 않음
값은 허용
유지하지 않음 제품 정보, 설정 값 관리

 

6. 마무리

Java의 컬렉션 프레임워크는 다양한 자료 구조를 제공하여 데이터를 효율적으로 관리할 수 있게 해줍니다. ArrayList는 순서가 중요한 데이터 목록을 관리할 때, HashSet은 중복을 허용하지 않는 데이터를 관리할 때, HashMap은 키-값 쌍으로 데이터를 관리할 때 유용하게 사용됩니다.

반응형