어제 오늘 내일

[Java 컬렉션] HashMap vs HashSet vs TreeSet 비교 본문

IT/Java

[Java 컬렉션] HashMap vs HashSet vs TreeSet 비교

hi.anna 2025. 10. 9. 06:38

자바 컬렉션 프레임워크에는 HashMap, HashSet, TreeSet처럼 이름이 비슷하지만 용도가 다른 클래스들이 있습니다. 이번 글에서는 이들의 차이와 활용 포인트를 정리합니다.

 

1. HashMap

  • 구조: 해시 테이블 기반 (Key-Value 저장)
  • 중복: Key는 중복 불가, Value는 중복 가능
  • 순서: 순서 보장 안 됨
  • 시간 복잡도: 평균 O(1) (삽입/검색/삭제)
  • 활용: 키-값 매핑, 데이터 캐싱, 빈도수 세기
import java.util.HashMap;

public class HashMapExample {
    public static void main(String[] args) {
        HashMap<String, Integer> map = new HashMap<>();
        map.put("kim", 90);
        map.put("lee", 80);
        map.put("park", 95);

        System.out.println(map.get("lee")); // 80
    }
}

 

2. HashSet

  • 구조: 내부적으로 HashMap을 사용 (Key만 존재하는 형태)
  • 중복: 허용하지 않음
  • 순서: 순서 보장 안 됨
  • 시간 복잡도: 평균 O(1)
  • 활용: 중복 제거, 고유한 데이터 저장
import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("apple");
        set.add("banana");
        set.add("apple"); // 중복 무시

        System.out.println(set); // [banana, apple] (순서 보장 X)
    }
}

 

3. TreeSet

  • 구조: Red-Black Tree 기반 (정렬된 이진 탐색 트리)
  • 중복: 허용하지 않음
  • 순서: 자동 정렬 (기본 오름차순)
  • 시간 복잡도: O(log n)
  • 활용: 정렬된 데이터 저장, 범위 검색
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<Integer> set = new TreeSet<>();
        set.add(30);
        set.add(10);
        set.add(20);

        System.out.println(set); // [10, 20, 30]
        System.out.println(set.subSet(10, 30)); // [10, 20]
    }
}

 

4. 차이점 요약

특징HashMapHashSetTreeSet
데이터 저장Key-Value 쌍Key만 저장Key만 저장
중복 허용Key 중복 불가, Value 중복 가능중복 불가중복 불가
순서보장 안 함보장 안 함자동 정렬(기본 오름차순)
시간 복잡도평균 O(1)평균 O(1)O(log n)
주요 활용매핑, 빈도수, 캐싱고유 집합정렬된 집합, 범위 검색

 

결론

  • Key-Value 형태가 필요하면 HashMap
  • 고유한 값 집합이 필요하면 HashSet
  • 정렬된 집합이 필요하면 TreeSet
  • 성능이 최우선이면 HashMap/HashSet, 정렬이나 범위 조건이 필요하면 TreeSet을 선택
반응형
Comments