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

+ Recent posts