TreeSet과 TreeMap은 계층 구조를 활용해서 검색 기능을 강화시킨 컬렉션입니다.
이 컬렉션에 나오는 자료구조인 이진 트리의 내부 구조를 알고 있어야 API를 사용할 수 있습니다.
간단히 개념만 설명하면, 루트 노드를 정하고, 대소 비교를 통해 크면 오른쪽, 작으면 왼쪽으로 비교하며 위치하게 됩니다.
SQL에서 SELECT문을 통한 JOIN이나 복잡한 쿼리로 데이터를 조회할 때, 인덱스를 이용합니다.
이 때, 이진 트리의 구조와 개념을 제대로 알고 사용하면 많은 도움이 될 수 있습니다.
1. 트리 셋( TreeSet )
TreeSet은 이진 트리(binary tree)를 기반으로 한 Set 컬렉션입니다.
좌, 우 자식 노드를 참조하기 위한 두 개의 변수로 구성됩니다.
다음은 주요 메서드입니다.
- 특정 객체를 찾는 메서드 : fist(), last(), lower(), higher() 등
- 정렬 메서드 : descendingiterator(), descendingSet()
- 범위 검색 메서드 : headSet(), tailSet(), subSet()
숫자에 대한 TreeSet은 간단하므로, 다루지 않고 String으로 넘어가겠습니다.
다음은 간단한 예시 코드입니다.
@Log4j2
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<String> treeSet = new TreeSet<>();
treeSet.add("apple");
treeSet.add("forever");
treeSet.add("description");
treeSet.add("ever");
treeSet.add("zoo");
treeSet.add("base");
treeSet.add("guess");
treeSet.add("cherry");
log.info("**** [c~f 사이의 단어 검색] ****");
// 부분범위(Sub-range Search) 검색 수행
NavigableSet<String> rangeSet = treeSet.subSet("cherry", true, "forever", true);
rangeSet.forEach(log::info);
} // main
} // end class
subSet에 boolean은 해당 문자열을 포함할 것인지를 결정하게 합니다.
문자열의 맨처음 문자만 넣으면 boolean의 사용의미가 없어지므로, 반드시 문자열을 넣어야 합니다.
1. 트리 맵( TreeMap )
TreeMap은 이진 트리(binary Tree)를 기반으로 한 Map 컬렉션입니다.
키와 값이 저장된 Map.Entry를 저장하며 좌, 우 자식 노드를 참조하기 위한 두 개의 변수로 구성됩니다.
다음은 주요 메서드입니다.
- 특정 객체를 찾는 메서드 : fistEntry(), lastEntry(), lowerEntry(), higherEntry() 등
- 정렬 메서드 : descendingKeySet(), descendingMap()
- 범위 검색 메서드 : headMap(), tailMap(), subMap()
TreeMap은 TreeSet과 비슷한 구성을 가지고 있으므로 따로 다루지 않겠습니다.
'Java > Collection Framework' 카테고리의 다른 글
맵 컬렉션 (0) | 2023.08.03 |
---|---|
셋 컬렉션 (0) | 2023.08.03 |
리스트 컬렉션 (0) | 2023.08.02 |
컬렉션 프레임워크 개요 (0) | 2023.08.02 |