Java NavigableMap 마스터: 기능, 메서드, TreeMap 구현
Java NavigableMap 인터페이스
이 튜토리얼에서는 Java NavigableMap 인터페이스, 핵심 메서드, TreeMap과의 사용법을 설명합니다.
Java 컬렉션 프레임워크의 NavigableMap 인터페이스는 맵 엔트리 간 탐색 기능을 제공합니다. SortedMap의 특화 버전으로, 양방향 순회를 위한 고수준 메서드로 기능을 확장합니다.
NavigableMap을 구현하는 클래스
NavigableMap은 인터페이스이므로 직접 인스턴스화할 수 없습니다. 주 구현체는 TreeMap 클래스로, 키를 정렬된 순서로 유지하는 자가 균형 이진 탐색 트리 구조를 제공합니다.
NavigableMap 사용법
먼저 인터페이스를 임포트하세요:
import java.util.NavigableMap;
import java.util.TreeMap;
인스턴스 생성:
// TreeMap 클래스의 NavigableMap 구현
NavigableMap<Key, Value> numbers = new TreeMap<>();
위 코드에서 numbers는 키-값 쌍을 저장하는 TreeMap입니다. Key는 고유 식별자, Value는 연관 데이터입니다.
NavigableMap 핵심 메서드
모든 SortedMap 연산을 사용할 수 있지만, 몇몇은 더 엄격한 제어를 위해 오버라이드됩니다. 주요 메서드:
headMap(key, booleanInclusive)
key보다 엄격하게 작은 키를 가진 맵 부분 뷰 반환(booleanInclusive가 false일 때, 기본값). booleanInclusive가 true면 key 엔트리 포함.
tailMap(key, booleanInclusive)
key보다 크거나 같은 키를 가진 맵 부분 뷰 반환(booleanInclusive가 true일 때, 기본값). false 전달 시 key 엔트리 제외.
subMap(fromKey, fromInclusive, toKey, toInclusive)
fromKey와 toKey 사이의 뷰 제공. 기본값은 fromInclusive = true, toInclusive = false. 이 플래그 조정으로 경계 키 포함 여부 제어.
추가 탐색 메서드
- descendingMap() – 엔트리 순서 반전
- descendingKeySet() – 역순 키 뷰
- ceilingEntry(key) – 주어진 키 이상인 가장 낮은 엔트리
- ceilingKey(key) – 주어진 키 이상인 가장 낮은 키
- floorEntry(key) – 주어진 키 이하인 가장 높은 엔트리
- floorKey(key) – 주어진 키 이하인 가장 높은 키
- higherEntry(key) – 주어진 키보다 큰 가장 낮은 엔트리
- higherKey(key) – 주어진 키보다 큰 가장 낮은 키
- lowerEntry(key) – 주어진 키보다 작은 가장 높은 엔트리
- lowerKey(key) – 주어진 키보다 작은 가장 높은 키
- firstEntry() – 가장 작은 키의 엔트리
- lastEntry() – 가장 큰 키의 엔트리
- pollFirstEntry() – 첫 번째 엔트리 검색 및 제거
- pollLastEntry() – 마지막 엔트리 검색 및 제거
공식 명세는 Java NavigableMap 문서 참조.
TreeMap 구현 예제
import java.util.NavigableMap;
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
// TreeMap을 사용한 NavigableMap 생성
NavigableMap<String, Integer> numbers = new TreeMap<>();
// 맵에 요소 삽입
numbers.put("Two", 2);
numbers.put("One", 1);
numbers.put("Three", 3);
System.out.println("NavigableMap: " + numbers);
// 맵의 첫 번째 엔트리 접근
System.out.println("First Entry: " + numbers.firstEntry());
// 맵의 마지막 엔트리 접근
System.out.println("Last Entry: " + numbers.lastEntry());
// 맵에서 첫 번째 엔트리 제거
System.out.println("Removed First Entry: " + numbers.pollFirstEntry());
// 맵에서 마지막 엔트리 제거
System.out.println("Removed Last Entry: " + numbers.pollLastEntry());
}
}
출력
NavigableMap: {One=1, Three=3, Two=2} First Entry: One=1 Last Entry: Two=2 Removed First Entry: One=1 Removed Last Entry: Two=2
TreeMap에 대해 더 알아보려면 Java TreeMap 문서를 참조하세요.
NavigableMap 인터페이스와 TreeMap 구현체에 대한 확실한 이해로 Java 애플리케이션에서 효율적인 정렬 데이터 구조를 구축할 수 있습니다.