Set 에 관하여

2025. 2. 11. 20:05·java

Java에서 Set 인터페이스는 중복을 허용하지 않는 컬렉션을 다룰 때 사용됩니다. Set의 주요 구현체로는 HashSet, LinkedHashSet, TreeSet 등이 있으며, 각각의 특성과 성능 차이가 존재합니다. 이 글에서는 Java의 Set 구현체들의 차이점을 비교하고 적절한 사용 사례를 분석해보겠습니다.


1. Set 인터페이스란?

Set은 Java의 java.util 패키지에 속해 있으며, 주요 특징은 다음과 같습니다:

  • 중복 요소 허용하지 않음
  • 순서가 보장되지 않을 수도 있음
  • 요소의 고유성 유지 (equals() & hashCode() 사용)

Java에서 Set의 주요 구현체는 HashSet, LinkedHashSet, TreeSet 입니다.


2. 주요 Set 구현체 비교

2.1 HashSet

HashSet은 해시 테이블(Hash Table) 기반의 Set 구현체입니다.

특징:

  • 순서를 보장하지 않음
  • 중복된 요소 자동 제거
  • 삽입 및 삭제 성능 우수 (O(1))
  • Thread-safe 하지 않음

사용 예제:

import java.util.*;
public class HashSetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Cherry");
        set.add("Apple"); // 중복된 요소 추가 (무시됨)
        System.out.println(set); // 출력: [Banana, Apple, Cherry] (순서는 랜덤)
    }
}

사용 사례:

  • 빠른 검색 및 삽입/삭제가 필요한 경우 (O(1))
  • 중복 제거가 필요한 경우

2.2 LinkedHashSet

LinkedHashSet은 HashSet의 특징을 유지하면서 요소의 삽입 순서를 보장하는 Set 구현체입니다.

특징:

  • 요소의 삽입 순서 유지
  • 검색, 삽입, 삭제 성능 (O(1))
  • 메모리 사용량이 HashSet보다 큼 (이중 연결 리스트 사용)

사용 예제:

import java.util.*;
public class LinkedHashSetExample {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<>();
        set.add("Dog");
        set.add("Cat");
        set.add("Horse");
        System.out.println(set); // 출력: [Dog, Cat, Horse] (삽입 순서 유지)
    }
}

사용 사례:

  • 중복을 제거하면서도 요소의 삽입 순서를 유지해야 하는 경우
  • 순차적인 데이터 처리가 필요한 경우

2.3 TreeSet

TreeSet은 이진 검색 트리(Balanced Tree, Red-Black Tree) 기반의 Set 구현체로, 요소를 정렬된 상태로 저장합니다.

특징:

  • 자동 정렬 유지 (Comparable 또는 Comparator 필요)
  • 검색 성능 우수 (O(log n))
  • 삽입 및 삭제 성능 (O(log n))
  • null 값을 허용하지 않음

사용 예제:

import java.util.*;
public class TreeSetExample {
    public static void main(String[] args) {
        Set<Integer> set = new TreeSet<>();
        set.add(30);
        set.add(10);
        set.add(20);
        System.out.println(set); // 출력: [10, 20, 30] (오름차순 정렬 유지)
    }
}

사용 사례:

  • 자동 정렬이 필요한 경우
  • 범위 검색(첫 번째, 마지막 요소 찾기)이 필요한 경우

3. 마무리

  • Set은 중복을 허용하지 않는 데이터 컬렉션을 제공하는 인터페이스입니다.
  • HashSet, LinkedHashSet, TreeSet은 각각 속도, 메모리 사용량, 정렬 유지 등의 측면에서 차이가 있습니다.
  • 적절한 Set 구현체를 선택하여 성능과 코드 가독성을 최적화할 수 있습니다.

'java' 카테고리의 다른 글

Tree 에 관하여  (1) 2025.02.20
Map 에 관하여  (1) 2025.02.18
List 에 관하여  (0) 2025.02.10
DTO, VO, DAO 에 관하여  (0) 2025.02.06
Synchronized 에 관하여  (0) 2025.02.05
'java' 카테고리의 다른 글
  • Tree 에 관하여
  • Map 에 관하여
  • List 에 관하여
  • DTO, VO, DAO 에 관하여
heejunp
heejunp
희준개발
  • heejunp
    희준개발
    heejunp
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • java (16)
      • spring (1)
        • test (0)
      • web (1)
      • cloud (1)
      • database (2)
      • algorithm (7)
      • OS (2)
      • sonarqube (0)
      • ai (1)
      • 기타 (2)
      • 사고 (1)
      • go (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    heejunp
    Set 에 관하여
    상단으로

    티스토리툴바