JAVA/Java Collection Framwork

Java Set 클래스 총정리: HashSet부터 TreeSet까지 쉽게 이해하기 - 코드카인 티스토리

CodeCaine Explorer 2024. 12. 18. 09:11
728x90
반응형
SMALL

안녕하세요😊 코드카인 여러분!

오늘은 Java에서 자주 사용되는 HashSet, LinkedHashSet, TreeSet에 대해 알아보려 합니다. 일상 속에서 흔히 볼 수 있는 "물건 정리 방법"에 비유해 설명할게요. 세 가지 모두 Set 인터페이스를 구현하지만, 각기 다른 특징을 가지고 있어요. 🛠️


🎯 HashSet: 빠르고 효율적인 물건 보관함

HashSet은 일상생활에서 "물건을 아무 순서 없이 빠르게 꺼낼 수 있는 서랍장"과 같아요.

  • 특징 :
    • 중복을 허용하지 않아요. (유일성 보장)
    • 정렬되지 않은 상태로 저장돼요.
    • 빠른 검색 성능을 제공합니다. (O(1) 접근 시간)

사용 예시:

  • 중복 없는 학번 리스트 관리
  • 중복 제거 후 데이터 저장
import java.util.HashSet;

public class Main {
    public static void main(String[] args) {
        HashSet<String> items = new HashSet<>();
        items.add("사과");
        items.add("바나나");
        items.add("사과"); // 중복 추가 시 무시됨
        System.out.println(items); // [바나나, 사과] (순서는 랜덤)
    }
}

🎯 LinkedHashSet: 순서를 기억하는 노트

LinkedHashSet은 "작성된 순서를 기억하는 노트" 같아요.

  • 특징 :
    • 삽입 순서를 유지합니다.
    • 중복 허용하지 않아요.
    • HashSet보다 약간 느릴 수 있지만, 순서 보존이 필요할 때 유용해요.

사용 예시:

  • 입력 순서대로 유지해야 하는 상품 목록
  • 중복 없는 방문 기록 저장
import java.util.LinkedHashSet;

public class Main {
    public static void main(String[] args) {
        LinkedHashSet<String> items = new LinkedHashSet<>();
        items.add("사과");
        items.add("바나나");
        items.add("딸기");
        System.out.println(items); // [사과, 바나나, 딸기]
    }
}

🎯 TreeSet: 잘 정돈된 책장

TreeSet은 "항상 알파벳 순서대로 정렬된 책장"과 유사합니다.

  • 특징 :
    • 자동 정렬(오름차순 또는 사용자 정의 정렬) 지원
    • 중복 허용되지 않아요.
    • 검색, 추가, 삭제 성능은 O(log n)으로 효율적이에요.

사용 예시:

  • 알파벳 순으로 학생 이름 저장
  • 정렬된 고유값 저장
import java.util.TreeSet;

public class Main {
    public static void main(String[] args) {
        TreeSet<String> items = new TreeSet<>();
        items.add("바나나");
        items.add("사과");
        items.add("딸기");
        System.out.println(items); // [사과, 딸기, 바나나] (오름차순 정렬)
    }
}

🚀 HashSet, LinkedHashSet, TreeSet 비교

특징 HashSet LinkedHashSet TreeSet
중복 허용
순서 유지 ✅ (삽입 순서) ✅ (정렬 순서)
성능 O(1) O(1) O(log n)
정렬

😊 마무리하며..

HashSet, LinkedHashSet, TreeSet은 데이터의 고유성을 보장하면서 상황에 따라 다르게 사용할 수 있어요. 📝
어떤 Set을 사용할지 고민된다면 아래처럼 선택해보세요:

  1. 빠른 서치가 중요하다면 👉 HashSet
  2. 순서 유지가 필요하다면 👉 LinkedHashSet
  3. 정렬된 데이터가 필요하다면 👉 TreeSet
728x90
반응형
SMALL