Programming/자바(Java)
11-39 TreeSet - 범위 탐색, 정렬
먹보 개발자
2024. 10. 14. 14:23
- 이진 탐색 트리(binary search tree)로 구현. 범위 탐색과 정렬에 유리.
- 이진 트리는 모든 노드가 최대 2개(0~2)의 하위 노드를 갖음
각 요소(node)가 나무(tree)형태로 연결(LinkedList의 변형)
class TreeNode {
TreeNode left; // 왼쪽 자식노드
Object element; // 저장할 객체
TreeNode right; // 오른쪽 자식노드
}
이진 탐색 트리(binary search tree)
- 부모보다 작은 값 왼쪽, 큰 값은 오른쪽에 저장
- 데이터가 많아질 수록 추가, 삭제에 시간이 더 걸림(비교 횟수 증가)
TreeSet - 데이터 저장과정 boolean add(Object o) - 중복x 이기때문 equals와 hashCode 메서드 호출
* TreeSet에 7,4,9,1,5의 순서로 데이터를 저장하면, 아래의 과정을 거친다.
(루트부터 트리를 따라 내려가며 값을 비교. 작으면 왼쪽, 크면 오른쪽에 저장)
TreeSet 주요 생성자와 메서드
생성자 또는 메서드 | 설 명 |
TreeSet() (기본 comparable) | 기본 생성자 (Default constructor) |
TreeSet(Collection c) | 주어진 컬렉션을 저장하는 TreeSet을 생성 (Creates a TreeSet that stores the given collection) |
TreeSet(Comparator comp) (비교기준제공) | 주어진 정렬 기준으로 정렬하는 TreeSet을 생성 (Creates a TreeSet that is sorted based on the given comparator) |
Object first() (제일 작은거 오름차순) | 정렬된 순서에서 첫 번째 객체를 반환 (Returns the first object in sorted order) |
Object last() (제일 큰거 오름차순) | 정렬된 순서에서 마지막 객체를 반환 (Returns the last object in sorted order) |
Object ceiling(Object o) (올림) | 지정된 객체와 같은 객체를 반환. 없으면 큰 값을 가진 객체 중 가장 제일 가까운 값의 객체를 반환. 없으면 null |
Object floor(Object o) (버림) | 지정된 객체와 같은 객체를 반환. 없으면 작은 값을 가진 객체 중 가장 제일 가까운 값의 객체를 반환. 없으면 null |
Object higher(Object o) | 지정된 객체보다 큰 값을 가진 객체 중 제일 가까운 값의 객체를 반환. 없으면 null |
Object lower(Object o) | 지정된 객체보다 작은 값을 가진 객체 중 제일 가까운 값의 객체를 반환. 없으면 null |
SortedSet subSet(Object fromElement, Object toElement) | 범위 검색(fromElement와 toElement 사이)의 결과를 반환한다.(끝 범위인 toElement는 범위에 포함되지 않음) |
SortedSet headSet(Object toElement) | 지정된 객체보다 작은 값의 객체들을 반환한다. |
SortedSet tailSet(Object fromElement) | 지정된 객체보다 큰 값의 객체들을 반환한다. |
headSet(50) -> 왼쪽 가지들을 다 출력함
◆알아두면 좋음
트리 순회 (tree traversal)
- 이진 트리의 모든 노드를 한번씩 읽는 것을 트리 순회라고 한다.
- 전위, 중위, 후위 순회법이 있으며, 중위 순회하면 오름차순으로 정렬된다.