ConcurrentNavigableMap — 내비게이션 가능한 동시성 맵
ConcurrentNavigableMap — 내비게이션 가능한 동시성 맵
ConcurrentNavigableMap<K,V>는 ConcurrentMap에 NavigableMap 연산(정렬된 키 범위 조회, 종점 포함/제외 뷰 등)을 더한 인터페이스예요. 정렬된 키 순서가 중요하면서도 동시성을 유지해야 할 때 사용해요.
본문
개념 이해하기
ConcurrentNavigableMap은 NavigableMap 연산을 지원하는 ConcurrentMap으로, 내비게이션 가능한 서브맵에도 재귀적으로 적용돼요.
public interface ConcurrentNavigableMap<K,V>
extends ConcurrentMap<K,V>, NavigableMap<K,V>
대표 구현체는 ConcurrentSkipListMap이에요. JDK 1.6부터 제공됐어요.
범위 뷰 메서드
ConcurrentNavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) — 키가 fromKey부터 toKey까지인 부분의 뷰를 반환해요. fromKey와 toKey가 같으면 두 종점 모두 포함(fromInclusive·toInclusive가 둘 다 true)인 경우가 아니면 빈 맵이에요. 반환 맵은 이 맵에 백업돼요. 범위 밖의 키를 삽입하거나 범위 밖 종점의 서브맵을 만들려 하면 IllegalArgumentException.
ClassCastException,NullPointerException,IllegalArgumentException
ConcurrentNavigableMap<K,V> headMap(K toKey, boolean inclusive) — 키가 toKey보다 작은(포함이면 같거나 작은) 부분의 뷰를 반환해요.
ConcurrentNavigableMap<K,V> tailMap(K fromKey, boolean inclusive) — 키가 fromKey보다 큰(포함이면 같거나 큰) 부분의 뷰를 반환해요.
ConcurrentNavigableMap<K,V> subMap(K fromKey, K toKey) — subMap(fromKey, true, toKey, false)과 동등해요(시작 포함, 끝 제외).
ConcurrentNavigableMap<K,V> headMap(K toKey) — 키가 toKey보다 엄격히 작은 뷰. headMap(toKey, false)와 동등.
ConcurrentNavigableMap<K,V> tailMap(K fromKey) — 키가 fromKey보다 크거나 같은 뷰. tailMap(fromKey, true)와 동등.
내비게이션·뷰 메서드
ConcurrentNavigableMap<K,V> descendingMap() — 매핑의 역순 뷰를 반환해요. Collections.reverseOrder(comparator())와 같은 순서를 가져요. m.descendingMap().descendingMap()은 m과 본질적으로 동등한 뷰예요.
NavigableSet<K> navigableKeySet() — 키의 NavigableSet 뷰를 반환해요. iterator는 오름차순으로 키를 반환해요. 요소 제거를 지원하되 add/addAll은 지원하지 않아요. iterator·spliterator는 약하게 일관적이에요.
NavigableSet<K> keySet() — navigableKeySet()와 동등해요.
NavigableSet<K> descendingKeySet() — 키의 역순 NavigableSet 뷰를 반환해요. iterator는 내림차순으로 키를 반환해요.