TreeMap은 key를 기준으로 요소를 정렬해주는 레드블랙트리 기반의 Map이다. 일반적으로는 자연적인 순서를 기반으로 정렬을 해주는데, comparator를 구현하였을 경우에는 그 순서대로 정렬을 해 준다.
NavigableMap을 구현하고 있는데, NaigableMap의 코드를 보면 또 SortedMap을 구현하고 있다.
즉 TreeMap을 정렬 가능한 맵으로 만들어주는 기본 포맷은 SortedMap이라고 볼 수 있다.
처음에 TreeMap을 사용하려고 했을 때 HashMap을 사용할 때처럼 Map 인터페이스에 TreeMap을 선언했는데, 이렇게 하니까 정렬에 관련된 메서드가 동작이 안 되었다.
TreeMap을 선언할 때는 인터페이스에 선언하는 게 아니라 NavigableMap에 선언해야 한다.
SortedMap 인터페이스에 선언해도 되는데, 이렇게 할 때보다 NavigableMap으로 선언했을 때 사용 가능한 메서드가 더 많다.
// Map 인터페이스에 TreeMap을 생성하는 방식 => NavigableMap이 가진 정렬관련 메서드 사용이 불가능하다.
Map<Integer, Integer> map = new TreeMap<>();
// NavigableMap 인터페이스로 생성해야 정렬 기능을 사용할 수 있다.
NavigableMap<Integer, Integer> map = new NavigableMap<>();
// 이렇게 해도 되지만 이왕이면 위처럼 인터페이스로 선언하자.
TreeMap<Integer, Integer> map = new TreeMap<>();
사용 예시는 아래와 같다.
public static void main(String[] args) throws Exception {
NavigableMap<Integer, String> map = new TreeMap<>();
map.put(1, "first");
map.put(3, "third");
map.put(2, "second");
map.entrySet().stream().forEach(e -> System.out.println(e));
System.out.println("첫번째 키: " + map.firstKey());
System.out.println("마지막 키: " + map.lastKey());
System.out.println("첫번째 요소: " + map.firstEntry().toString());
System.out.println("마지막 요소: " + map.lastEntry().toString());
System.out.println("주어진 값보다 크거나 같은 키: " + map.floorKey(2));
System.out.println("주어진 값보다 큰 키: " + map.higherKey(2));
}
// 실행 결과
1=first
2=second
3=third
첫번째 키: 1
마지막 키: 3
첫번째 요소: 1=first
마지막 요소: 3=third
주어진 값보다 크거나 같은 키: 2
주어진 값보다 큰 키: 3
firstKey, lastKey 같은 메서드도 있어서 정렬이 되는 Deque처럼 사용할 수도 있다.
이외에도 subMap, headMap과 같이 특정 키 값을 기준으로 Map을 자르는 메서드도 있다.
더 많은 메서드는 javadoc에서 확인하면 된다.
'java' 카테고리의 다른 글
[230827] Exception에 관해서 (2) - StackTrace (0) | 2023.08.27 |
---|---|
[230820] Exception에 관해서 (1) - Error, Exception, RuntimeException (0) | 2023.08.20 |
[230805] [google drive api] java api 사용하기 (3) - 파일 검색 코드 작성 (0) | 2023.08.05 |
[211005] JNI(Java Native Interface)로 C++ dll 사용하기 - cmd 사용 (0) | 2021.10.05 |
[210623] spring boot - error page 만들기 (0) | 2021.06.23 |