본문 바로가기
개발/Java

Map - TreeMap 사용하는 방법

by Devsong26 2017. 11. 5.

- TreeMap이란?

NavigableMap 인터페이스를 구현한 Red-Black tree입니다. 

key값에 의해 정렬이 되는데, 생성자에 Comparator객체를 입력하여 생성할 경우 Comparator의 compare메소드에 의해 정렬이 이루어집니다. 

기본적으로는 natural ordering이 이루어집니다. 

 

 

- 특징

(1) containsKey, get, put, remove 메소드를 수행시 O(log(n))의 시간복잡도를 가집니다.

(2) 정렬은 natural ordeing의 경우 Map 인터페이스의 equals메소드를 통해서 이루어지고, Comparator를 매개변수로 입력하여 생성된 TreeMap객체에서는 compare 메소드를 통해서 이루어집니다.

(3) 동기화가 되지 않습니다. 동기화되는 TreeMap객체를 생성하려면 아래와 같이 생성하면 됩니다.

SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));

(4) Iterator객체를 keySet(), Iterator() 메소드를 호출하여 가져온 다음에 구조적으로 TreeMap객체의 entry를 변경할 경우 ConcurrentModificationException이 발생합니다. 

 

* 구조적인 변경: add, delete 메소드, 비구조적인 변경: key에 mapping된 값만 변경

 

 

- 생성자

 

//첫번째 생성자

TreeMap<String, Integer> map1 = new TreeMap<String, Integer>();

//두번째 생성자

TreeMap<String, Integer> map2 = new TreeMap<String, Integer>(

  new Comparator<String>() {

    @Override

    public int compare(String o1, String o2){

      return o2.charAt(0) - o1.charAt(0);

    }

  }

);

//네번째 생성자

TreeMap<String, Integer> map4 = new TreeMap<String, Integer>(SortedMap<K, ? extedns V> m);

첫번째 생성자는 기본생성자이며 객체 생성시 natural ordering 정렬을 갖는 빈 TreeMap 객체를 생성합니다.

두번째 생성자는 매개변수로 Comparator객체를 입력하고 생성된 TreeMap객체는 compare 메소드를 통해서 정렬을 합니다. 

세번째 생성자는 매개변수로 Map인터페이스 객체를 입력하여 TreeMap객체를 생성합니다. 

이 때, 매개변수인 Map객체와 동일한 mappings를 가지며 natural ordering 정렬을 합니다. 

네번째 생성자는 매개변수로 SortedMap객체를 입력하여 TreeMap객체를 생성합니다. 

이 때, 매개변수인 SortedMap객체와 동일한 mappings와 정렬 방법을 가집니다. 

 

 

- 메소드

모든 메소드를 설명하지 않습니다.

 

(1) ceilingEntry(K key)    반환형: Map.Entry<K,V>

 

map1.put("aa", 333);

Map.Entry<String, Integer> entry = map1.ceilingEntry("aa");

System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());

 

매개변수로 입력되는 key값에 해당하는 mapping이 있을경우 Map.Entry<K,V> 객체를 반환합니다. 

없을 경우 null을 반환합니다. 

 

(2) ceilingKey(K key)    반환형: K

입력되는 key값보다 크거나 같은 key값이 TreeMap객체에 존재한다면 그 중 가장 작은 값을 반환합니다. 

없을 경우 null을 반환하며 key값이 문자형일 경우 아스키코드로 비교합니다.

 

(3) clear()    반환형: void

TreeMap객체의 모든 mapping을 삭제합니다.

 

(4) clone()    반환형: Object

TreeMap 객체의 mapping을 가진 TreeMap객체를 생성합니다. 

 

(5) comparator()    반환형: Comparator<? super K>

TreeMap객체의 정렬에 사용되는 Comparator객체를 반환합니다. 

natural ordering의 경우에는 null를 반환합니다. 

 

(6) containsKey(Object key)    반환형: boolean

매개변수로 입력되는 key값이 TreeMap객체에 존재하면 true, 아니면 false를 반환합니다.

 

(7) containsValue(Object value)    반환형: boolean

매개변수로 입력되는 value값이 TreeMap객체에 존재하면 true, 아니면 false를 반환합니다.

 

(8)entrySet()    반환형: Set<Map.Entry<K,V>> 

http://developer-syubrofo.tistory.com/7 여기서 확인하실 수 있습니다. 

 

(9) firstKey()    반환형: K

TreeMap객체의 첫번째 key값을 반환합니다. 

 

(10) floorKey(K key)    반환형: K

입력되는 key보다 작거나 같은 key값이 TreeMap객체에 존재한다면 그 중 가장 큰 값을 반환합니다.

없을 경우 null을 반환합니다.

 

(11) get(Object key)    반환형: V

TreeMap객체에 key값에 해당하는 value값이 있다면 그 값을 반환하고 없을 경우 null을 반환합니다.

 

(12) headMap(K toKey)    반환형: SortedMap<K,V>

입력되는 key값 이전의 key값들을 가지는 SortedMap객체를 반환합니다.

없을경우 빈 SortedMap객체를 반환합니다.

 

(13) higherKey(K key)    반환형: K

입력되는 key값 보다 큰 key 중에 최소값을 반환합니다. 없을 경우 null을 반환합니다. 

 

(14) keySet()    반환형: Set<K>

TreeMap 객체의 key값들만 가지는 Set객체를 반환합니다.

 

(15) lastKey()

TreeMap객체에서 가장 큰 key값을 반환합니다. 

 

(16) lowerKey(K key)

입력되는 key보다 작은 키값들 중 최대값을 반환합니다. 없을 경우 null을 반환합니다. 

 

(17) put(K key, V value)    반환형: V

매개변수로 입력되는 (key, value) entry를 TreeMap객체에 연관(추가)시킵니다.

만일 기존의 key값이 존재한다면 value값만 변경됩니다. 

 

(18) putAll(Map<? extends K, ? extends V> map)    반환형: void

입력되는 Map객체의 mappings를 TreeMap객체에 연관시킵니다. 

 

(19) remove(Object key)    반환형: V

key에 해당하는 value값을 TreeMap객체에서 삭제합니다. 

 

(20) replace(K key, V value)    반환형: V

key값에 해당하는 value값을 입력되는 value값으로 변경시킵니다. 

key값이 TreeMap객체에 존재하지 않을 경우 값을 변경하지 않고 null을 반환합니다.

 

(21) size()    반환형: int

TreeMap객체의 mapping 수를 반환합니다. 

 

이상으로 포스팅을 마칩니다.

 


더 많은 내용을 보시려면 아래를 참고하세요.


블로그의 다른 글

 

Map - LinkedHashMap 사용하는 방법

- LinkedHashMap이란? Map 인터페이스를 구현한 클래스이며 동시에 Linked LIst이면서 Hash table입니다. - 특징 (1) 입력했던 순서대로 Entry가 LinkedHashMap에 mapping됩니다. (2) LinkedHashMap은 double-link..

developer-syubrofo.tistory.com

 

maven없이 스프링(Spring) 프로젝트 만들기 (1) - 프로젝트 생성하기

maven 외부 저장소에서 라이브러리를 프로젝트에 포함시킬 때 간혹 문제가 발생하는 경우가 있어서 maven이 없는 스프링 프로젝트를 만들어 보겠습니다. - Dynamic Web Project 생성하기 프로젝트 이름

developer-syubrofo.tistory.com

 

maven없이 스프링(Spring) 프로젝트 만들기 (2) - 웹 앱 실행하기

1부에서 작업한 코드로는 웹 프로젝트를 실행할 수 없습니다. 추가 작업을 하겠습니다. Java Resources -> src 우클릭 합니다. Name에 "spring.home.controller"를 입력 후 "Finish"를 누릅니다. 생성된 패키..

developer-syubrofo.tistory.com

 

maven없이 스프링(Spring) 프로젝트 만들기 (3) - 디비(DB, Database) 연동하기 #1

스프링 디비 연동 포스팅은 3파트로 나뉩니다. (1) DB 드라이버, ibatis, mybatis.jar 다운받기 및 셋팅 (2) DTO, DAO, mybatis 작업하기 (3) view 페이지 작업, Controller 작업하기 지금 보실 내용은 (1) DB..

developer-syubrofo.tistory.com

 

maven없이 스프링(Spring) 프로젝트 만들기 (3) - 디비(DB, Database) 연동하기 #2

스프링 디비 연동 포스팅은 3파트로 나뉩니다. (1) DB 드라이버, ibatis, mybatis.jar 다운받기 및 셋팅 (2) DTO, DAO, mybatis 작업하기 (3) view 페이지 작업, Controller 작업하기 지금 보실 내용은 (2) DTO, D..

developer-syubrofo.tistory.com