- 이진 검색 트리를 사용하여 키-값 쌍으로 이루어진 데이터를 저장하는 컬렉션 클래스
: 레드-블랙 트리를 이용하여 구현- Map 인터페이스를 구현
- HashMap에 비해 범위 검색과 정렬에 특화됨
: 단, 그 외의 검색 작업을 수행할 때는 HashMap을 사용하는 것이 더욱 효과적
cf1) 첫번째, 두번째 캡처본은 java.util.TreeMap
이 구현한 인터페이스/상위클래스의 내부클래스까지 포함하는 클래스 다이어그램
상위 인터페이스
java.util.Map
- 하나의 데이터를 키(key)-값(value) 쌍으로 묶어서 저장하는 맵을 구현하기 위한 인터페이스
java.util.Entry
- Map에 저장되는 key-value 쌍을 다루기 위해 정의된 내부 인터페이스
- Map을 구현하는 클래스는 Map.Entry 인터페이스도 반드시 구현
TreeMap.SimpleImmutableEntry
,TreeMap.SimpleEntry
,TreeMap.Entry
등으로 구현됨
java.util.SortedMap
- 저장된 키-값 쌍들을 정렬한 맵 클래스를 다루는 데 필요한 기능들을 정의한 인터페이스
: 키를 기준으로 한 범위 검색 기능 정의TreeMap.SubMap
클래스 구현에 사용됨
java.util.NavigableMap
java.util.SortedMap
에서 정의한 범위 검색 기능을 확장한 인터페이스- 설정한 키 정렬 기준에 기반한 탐색 기능과 역순 정렬 기능을 추가 정의
TreeMap
,TreeMap.NavigableSubMap
등으로 구현됨
java.lang.Cloneable
- 이 인터페이스를 구현한 클래스의 인스턴스는 Object clone() 메서드를 통해 복제될 수 있음
- 마커 인터페이스
java.io.Serializable
- 이 인터페이스를 구현한 클래스의 인스턴스는 직렬화될 수 있음
- 마커 인터페이스
cf) 마커 인터페이스: 클래스에 관한 추가 정보를 제공하는 용도로 사용되는 빈 인터페이스
상위 클래스
java.util.AbstractMap
- Map 인터페이스에 정의된 기능을 바탕으로 Map의 기본 골격을 제공하는 추상 클래스
TreeMap
,TreeMap.NavigableSubMap
,TreeMap.SubMap
의 상위 클래스
java.util.AbstractMap.SimpleImmutableEntry
- 단순히 Entry 인터페이스에 정의된 메서드를 구현한
AbstractMap
추상 클래스의 스태틱 내부 클래스- 멤버변수를 변경할 수 없는 불변 객체이므로
setValue()
호출 시UnsupportedOperationException
발생Serializable
인터페이스의 구현 클래스이므로 직렬화 가능
java.util.AbstractMap.SimpleEntry
- 단순히 Entry 인터페이스에 정의된 메서드를 구현한
AbstractMap
추상 클래스의 스태틱 내부 클래스Serializable
인터페이스의 구현 클래스이므로 직렬화 가능
cf1) 첫번째 캡처본은 java.util.TreeMap
의 내부클래스에 관한 클래스 다이어그램
cf2) Iterator 계열 클래스를 제외한, TreeMap의 구성 요소(키, 값, 엔트리, 서브트리맵) 관련 내부 클래스를 중심으로 정리
맵 구성 요소 관련 내부 클래스
java.util.TreeMap.EntrySet
- TreeMap에 저장된 키와 값을 키-값 쌍인 엔트리 형태로 저장하는 Set 클래스
entrySet()
메서드의 내부 코드를 구현하는 용도로 사용- 일반적인 집합 클래스와는 달리 데이터의 추가는 불가능
java.util.TreeMap.KeySet
- TreeMap의 키들을 저장하기 위한 Set 클래스
keySet()
메서드의 내부 코드를 구현하는 용도로 사용- 일반적인 집합 클래스와는 달리 데이터의 추가는 불가능
java.util.TreeMap.Values
- TreeMap의 값들을 저장하기 위한 Set 클래스
values()
메서드의 내부 코드를 구현하는 용도로 사용- 일반적인 컬렉션 클래스와는 달리 데이터의 추가는 불가능
java.util.TreeMap.Entry
java.util.Entry
인터페이스를 구현한 클래스
: 키와 값을 한 쌍으로 묶기 위해 사용
서브맵 관련 내부 클래스
java.util.TreeMap.SubMap
SortedMap
인터페이스에 정의된 기능들을 구현한 SubMap의 기본 골격을 제공하는 추상 클래스
java.util.TreeMap.NavigableSubMap
NavigableSubMap
인터페이스에 정의된 기능들을 구현한 SubMap의 기본 골격을 제공하는 추상 클래스TreeMap.DescendingSubMap
클래스와TreeMap.AscendingSubMap
클래스에서 공통으로 사용되는 메서드를 제공- 내부 클래스로 추상 클래스
EntrySetView
를 보유
java.util.TreeMap.DescendingSubMap
- 키-값 쌍의 정렬 순서의 역순으로 범위 검색을 수행 가능한 SubMap을 구현한 클래스
java.util.TreeMap.AscendingSubMap
- 키-값 쌍의 정렬 순서대로 범위 검색을 수행 가능한 SubMap을 구현한 클래스
java.util.TreeMap.EntrySetView
TreeMap.DescendingEntrySetView
,TreeMap.AscendingEntrySetView
에서 공통으로 사용되는 메서드를 제공하는 추상 클래스- SubMap에서의 엔트리를 일부 구현한 클래스
java.util.TreeMap.DescendingEntrySetView
- SubMap에 저장된 키-값 쌍을 정렬 순서의 역순으로 접근하기 위한
iterator()
메서드를 제공java.util.TreeMap.EntrySet
과 기능적인 측면에서 유사
java.util.TreeMap.AscendingEntrySetView
- SubMap에 저장된 키-값 쌍을 정렬 순서대로 접근하기 위한
iterator()
메서드를 제공java.util.TreeMap.EntrySet
과 기능적인 측면에서 유사
cf) TreeMap 클래스에 포함된 전체 메서드에 관한 설명은 여기에서 확인 가능
TreeMap()
- TreeMap 객체를 생성하는 기본 생성자
TreeMap(Comparator c)
- 지정된 Comparator를 기준으로 정렬하는 TreeMap 객체를 생성
TreeMap(Map m)
- 주어진 Map에 저장된 모든 요소를 포함하는 TreeMap 객체를 생성
TreeMap(SortedMap m)
- 주어진 SortedMap에 저장된 모든 요소를 포함하는 TreeMap을 생성
boolean containsKey(Object key)
- 지정된 키가 TreeMap에 포함되어 있는지에 따라 true/false 중 하나를 반환
: 포함되면 true
boolean containsValue(Object value)
- 지정된 값이 TreeMap에 포함되어 있는지에 따라 true/false 중 하나를 반환
: 포함되면 true
Object put(Object key, Object value)
- 지정된 키와 값을 TreeMap에 저장
- TreeMap에 이미 지정된 키와 매핑되는 값이 존재하면 그 값을 지정한 새로운 값으로 갱신
void putAll(Map map)
- Map에 저장된 모든 요소를 TreeMap에 병합
Object remove(Object key)
- TreeMap에서 지정된 키로 저장된 객체를 제거
Object replace(Object key, Object value)
- 기존의 키에 매핑되어 있던 값을 지정한 값으로 변경
boolean replace(Object key, Object oldValue, Object newValue)
- 지정한 키-값 쌍이 TreeMap에 존재하면, 기존의 값을 지정한 새로운 값으로 변경
- 지정한 키와 값을 갖는 키-값 쌍이 TreeMap에 존재하지 않으면 false만 반환 후 종료
void replaceAll(BiFunction<K, V, V> function)
- 기존의 값마다 지정한 작업을 수행하여 얻은 결과값을 구하고, 해당 결과값으로 기존의 값들을 일괄적으로 대체
객체 단위 조회
Object get(Object key)
- TreeMap에서 지정된 키의 값을 반환
Object getOrDefault(Object key, Object defaultValue)
- TreeMap에서 지정된 키의 값을 반환하되, 지정된 키에 대응되는 값이 TreeMap에 존재하지 않으면 지정한 초기값을 반환
- Map 인터페이스에 구현된 default 메서드를 그대로 활용
컬렉션 단위 조회
Set entrySet()
- TreeMap에 저장된 키와 값을 키-값 쌍이 결합한 엔트리 형태로 Set에 저장하여 반환
Set keySet()
- TreeMap에 저장된 모든 키를 Set에 저장하여 반환
NavigableSet navigableKeySet()
- TreeMap에 저장된 키를 정렬 순서대로 NavigableSet에 저장하여 반환
NavigableSet descendingKeySet()
- TreeMap에 저장된 키를 정렬 순서의 역순으로 NavigableSet에 저장하여 반환
Collection values()
- TreeMap에 저장된 모든 값을 컬렉션의 형태로 변환하여 반환
cf) 지정한 키를 기준으로 TreeMap에서 동일한 값이나 근사값을 찾는 경우,
해당하는 값이나 대체할 값을 아예 찾을 수 없다면 null을 반환
찾는 대상과 동일한 키 검색
Object floorKey(Object key)
- 지정된 키와 일치하거나, 정렬 순서상 작은 것 중 제일 큰 키를 반환
Map.Entry floorEntry(Object key)
- 지정된 키와 일치하거나, 정렬 순서상 작은 것 중 제일 큰 키를 갖는 키-값 쌍을 반환
Object ceilingKey(Object key)
- 지정된 키와 일치하거나, 정렬 순서상 큰 것 중 제일 작은 키를 반환
Map.Entry ceilingEntry(Object key)
- 지정된 키와 일치하거나, 정렬 순서상 큰 것 중 제일 작은 키를 갖는 키-값 쌍을 반환
찾는 대상보다 작은 키 검색
Object lowerKey(Object key)
- 정렬 순서상 지정된 키보다 작은 것 중 제일 큰 키를 반환
Map.Entry lowerEntry(Object key)
- 정렬 순서상 지정된 키보다 작은 것 중 제일 큰 키를 갖는 키-값 쌍을 반환
찾는 대상보다 큰 키 검색
Object higherKey(Object key)
- 정렬 순서상 지정된 키보다 큰 것 중 제일 작은 키를 반환
Map.Entry higherEntry(Object key)
- 정렬 순서상 지정된 키보다 큰 것 중 제일 작은 키를 갖는 키-값 쌍을 반환
최대/최소의 키 검색
Object firstKey()
- TreeMap의 정렬 순서상 첫번째 키를 반환
Map.Entry firstEntry()
- TreeMap의 정렬 순서상 첫번째 키를 갖는 키-값 쌍을 반환
Object lastKey()
- TreeMap의 정렬 순서상 마지막 키를 반환
Map.Entry lastEntry()
- TreeMap의 정렬 순서상 마지막 키를 갖는 키-값 쌍을 반환
SortedMap 인터페이스 정의 메서드
SortedMap headMap(Object toKey)
- TreeMap에 저장된 첫번째 요소와 지정된 키 사이의 모든 요소가 담긴 SortedMap을 반환
- ToKey는 지정한 범위에 미포함
SortedMap tailMap(Object fromToKey)
- 지정된 키와 마지막 요소 사이의 모든 요소가 담긴 SortedMap을 반환
- fromKey는 지정한 범위에 미포함
SortedMap subMap(Object fromKey, Object toKey)
- 지정한 두 키 사이에 있는 모든 요소가 담긴 SortedMap을 반환
- 지정한 범위는
fromKey ≤ 저장할 요소의 키 < toKey
에 해당
NavigableMap 인터페이스 정의 메서드
NavigableMap headMap(Object toKey, boolean inclusive)
- TreeMap에 저장된 첫번째 요소와 지정된 키 사이의 모든 요소가 담긴 NavigableMap을 반환
toInclusive
가 true면toKey
를 범위에 포함NavigableMap tailMap(Object fromToKey, boolean inclusive)
- 지정한 키와 마지막 요소 사이의 모든 요소가 담긴 NavigableMap을 반환
fromInclusive
가 true면fromKey
를 범위에 포함NavigableMap subMap(Object fromKey, boolean fromInclusive, Object toKey, boolean toInclusive)
- 지정한 두 키 사이에 있는 모든 요소가 담긴 SortedMap을 반환
fromInclusive
가 true면fromKey
를,toInclusive
가 true면toKey
를 범위에 포함