TreeSet vs HashSet vs LinkedHashSet
항목 | TreeSet | HashSet | LinkedHashSet |
기반 자료구조 | Red-Black Tree (이진 탐색 트리) | Hash Table | Hash Table + Linked List |
정렬 여부 | ✅ 자동 정렬 (오름차순) | ❌ 없음 | ❌ 없음 |
삽입 순서 유지 | ❌ 유지되지 않음 | ❌ 유지되지 않음 | ✅ 유지됨 |
중복 허용 | ❌ | ❌ | ❌ |
null 허용 | ❌ (예외 발생) | ✅ 하나 가능 | ✅ 하나 가능 |
시간 복잡도 (삽입/삭제/탐색) | O(log n) | O(1) 평균 | O(1) 평균 |
부분 집합(subSet), 범위 검색 | ✅ 지원 | ❌ | ❌ |
Iterator 순회 순서 | 정렬 순 | 예측 불가 | 삽입 순서 유지 |
사용 추천 상황 | 정렬/범위 탐색이 필요한 경우 | 빠른 삽입/탐색이 필요한 경우 | 순서를 기억하면서 빠른 성능이 필요한 경우 |
상황별 추천
정렬된 값이 필요할 때 | TreeSet |
가장 빠른 탐색이 중요할 때 | HashSet |
삽입 순서를 유지하며 탐색도 빠르게 하고 싶을 때 | LinkedHashSet |
주의사항 정리
- TreeSet은 null 값 저장 불가, 삽입하려 하면 NullPointerException
- HashSet과 LinkedHashSet은 null 1개 저장 가능
- TreeSet은 정렬과 비교가 가능한 타입만 저장 가능 (Comparable 또는 Comparator 필요)
- LinkedHashSet은 내부적으로 이중 연결 리스트를 사용하여 순서를 기억하지만, 그만큼 메모리 사용량은 HashSet보다 크다.
'자료구조' 카테고리의 다른 글
LinkedHashMap - Java (2) | 2025.05.01 |
---|---|
HashMap - Java (2) | 2025.05.01 |
LinkedHashSet - Java (0) | 2025.04.30 |
HashSet - Java (0) | 2025.04.30 |
TreeSet - Java (0) | 2025.04.30 |