알고리즘 문제를 풀다가 TreeSet 을 처음 접하게 되어 기록한다.
TreeSet은 정렬된 집합(Set)이다.
내부는 Red-Black Tree 를 사용하여 원소를 정렬 상태로 유지한다.
중복은 자동 제거되며, 삽입 순서는 보장하지 않고 정렬 순서만 보장하는 Set 의 성질을 가지고 있다.
TreeSet 은 이진탐색 트리 중 레드-블랙 트리로 구현되어 있다.
이진 탐색 트리는 트리의 높이만큼 시간이 걸린다.
데이터의 값이 트리에 잘 분산되어지면 빠르지만 한쪽으로 치우쳐지면 비효율적이다.
이 문제를 해결하기 위해 "Red-Black Tree"가 등장한다.
Red-Black Tree 는 부모 노드보다 작은 값을 가지는 값은 왼쪽, 큰 값은 오른쪽으로 배치한다.
추가나 삭제 시, 균형을 맞추도록 설계되어 있다.
TreeSet<Integer> treeSet = new TreeSet<Integer>();
treeSet.add(1);
treeSet.remove(1);
treeSet.clear();
| Set | 정렬 | 평균 조회 | 순서 |
|---|---|---|---|
HashSet | 없음 | O(1) | 없음 |
| LinkedHashSet | 없음 | O(1) | 삽입 순서 유지 |
| TreeSet | 정렬(오름차순/사용자 정의) | O(log n) | 정렬 순서 |
HashSet / LinkedHashSet 이 더 적합TreeSet이 더 적합