본문 바로가기

자바

[JAVA] 자동 정렬해주는 Map TreeMap

728x90

TreeMap

공식문서에서의 TreeMap 소개

A Red-Black tree based NavigableMap implementation.

한국어로 번역하면 아래와 같다.

TreeMap 클래스는 빨간-검은색 트리 (Red-Black Tree)를 기반으로 구현된 NavigableMap 인터페이스의 구현체다.

그렇다면 Red-Black Tree에 대해 알아보자.

Red-Black Tree

Red-Black Tree는 정렬 된 정보를 빠르게 저장해주는 특수한 이진 검색 트리 데이터 구조를 가진다.

이진 트리는 최악의 경우 트리의 높이(N)만큼 의 시간 복잡도를 가진다.

반면 레드-블랙 트리의 경우 부모 노드보다 작은 값을 갖는 노드는 좌측으로, 큰 값을 갖는 노드는 우측 자식으로 배치한다.
이를 통하여 트리가 균등하게 되어 O(log N)의 시간 복잡도를 갖게 된다.

Red-Black-Tree

즉, TreeMap은 Red-Black Tee를 기반으로 구현되었기에 데이터를 삭제, 추가할 경우 정렬을 해준다.

TreeMap에 Key를 저장할 경우 자동 오름차순 정렬을 해주는것을 확인할 수 있다.
(숫자는 값으로, 문자열은 유니코드로 정렬됨)

TreeMap 사용법

TreeMap 선언

TreeMap<Integer,String> treemap1 = new TreeMap<Integer,String>(); // TreeMap 생성

TreeMap<Integer,String> treemap2 = new TreeMap<>(Treemap1); // TreeMap1 과 동일한 값을 가진 TreeMap 생성

TreeMap<Integer,String> treemap3 = new TreeMap<Integer,String>(){{ // put을 사용해 초기값 설정
    put(1,"a");

주의사항) HashMap과는 다르게 선언 시 크기 지정이 불가능하다.

TreeMap 데이터 추가

TreeMap<Integer,String> treemap = new TreeMap<Integer,String>();
    map.put(1, "ㄱ");
    map.put(2, "ㄴ");
    map.put(3, "ㄷ");

TreeMap 데이터 삭제

TreeMap<Integer, String> treemap = new TreeMap<Integer,String>();
        treemap.put(1, "ㄱ");
        treemap.put(2, "ㄴ");
        treemap.put(3, "ㄷ");
        treemap.remove(1); // key값 1 제거
        treemap.clear(); // 모든 값 제거