Java NavigableSet 인터페이스 완전 정복: 탐색, 정렬, 실전 예제
Java NavigableSet 인터페이스
이 튜토리얼에서는 예제를 통해 Java NavigableSet 인터페이스와 그 메서드들을 학습합니다.
Java Collections Framework의 NavigableSet 인터페이스는 집합 요소들 사이를 탐색하는 기능을 제공합니다.
NavigableSet은 SortedSet의 일종으로 간주됩니다.
NavigableSet을 구현하는 클래스
NavigableSet 인터페이스의 기능을 사용하려면 NavigableSet을 구현한 TreeSet 클래스를 사용해야 합니다.
NavigableSet 사용 방법
Java에서 NavigableSet을 사용하려면 java.util.NavigableSet 패키지를 임포트해야 합니다. 패키지 임포트 후 다음과 같이 탐색 가능한 집합을 생성할 수 있습니다.
// TreeSet 클래스에 의한 SortedSet 구현
NavigableSet<String> numbers = new TreeSet<>();
여기서 TreeSet 클래스의 numbers라는 이름의 탐색 가능 집합을 생성했습니다.
NavigableSet의 메서드
NavigableSet은 SortedSet의 일종으로 간주됩니다. 왜냐하면 NavigableSet이 SortedSet 인터페이스를 확장하기 때문입니다.
따라서 모든 SortedSet 메서드도 NavigableSet에서 사용할 수 있습니다. 이 메서드들의 작동 방식을 보려면 Java SortedSet을 참조하세요.
그러나 SortedSet의 일부 메서드(headSet(), tailSet(), subSet())는 NavigableSet에서 다르게 정의됩니다.
이 메서드들이 NavigableSet에서 어떻게 정의되는지 살펴보겠습니다.
headSet(element, booleanValue)
headSet() 메서드는 지정된 element(인수로 전달) 이전의 탐색 가능 집합의 모든 요소를 반환합니다.
booleanValue 매개변수는 선택 사항이며 기본값은 false입니다.
booleanValue로 true를 전달하면 지정된 요소를 포함한 그 이전의 모든 요소를 반환합니다.
tailSet(element, booleanValue)
tailSet() 메서드는 지정된 element(인수로 전달) 이후의 탐색 가능 집합의 모든 요소를 지정된 요소를 포함하여 반환합니다.
booleanValue 매개변수는 선택 사항이며 기본값은 true입니다.
booleanValue로 false를 전달하면 지정된 요소를 포함하지 않고 그 이후의 모든 요소를 반환합니다.
subSet(e1, bv1, e2, bv2)
subSet() 메서드는 e1과 e2 사이의 모든 요소를 e1을 포함하여 반환합니다.
bv1과 bv2는 선택적 매개변수입니다. bv1의 기본값은 true이고, bv2의 기본값은 false입니다.
bv1로 false를 전달하면 e1을 포함하지 않고 e1과 e2 사이의 모든 요소를 반환합니다.
bv2로 true를 전달하면 e1과 e2 사이의 모든 요소를 e1을 포함하여 반환합니다.
탐색을 위한 메서드
NavigableSet은 요소들을 탐색하는 데 사용할 수 있는 다양한 메서드를 제공합니다.
- descendingSet() - 집합의 요소 순서를 역순으로 바꿉니다.
- descendingIterator() - 집합을 역순으로 반복하는 데 사용할 수 있는 반복자를 반환합니다.
- ceiling() - 지정된 요소보다 크거나 같은 요소들 중 가장 낮은 요소를 반환합니다.
- floor() - 지정된 요소보다 작거나 같은 요소들 중 가장 큰 요소를 반환합니다.
- higher() - 지정된 요소보다 큰 요소들 중 가장 낮은 요소를 반환합니다.
- lower() - 지정된 요소보다 작은 요소들 중 가장 큰 요소를 반환합니다.
- pollFirst() - 집합에서 첫 번째 요소를 반환하고 제거합니다.
- pollLast() - 집합에서 마지막 요소를 반환하고 제거합니다.
NavigableSet에 대해 더 자세히 알아보려면 공식 Java 문서인 Java NavigableSet을 참조하세요.
TreeSet 클래스에서의 NavigableSet 구현
import java.util.NavigableSet;
import java.util.TreeSet;
class Main {
public static void main(String[] args) {
// TreeSet을 사용한 NavigableSet 생성
NavigableSet<Integer> numbers = new TreeSet<>();
// 집합에 요소 삽입
numbers.add(1);
numbers.add(2);
numbers.add(3);
System.out.println("NavigableSet: " + numbers);
// 첫 번째 요소 접근
int firstElement = numbers.first();
System.out.println("First Number: " + firstElement);
// 마지막 요소 접근
int lastElement = numbers.last();
System.out.println("Last Element: " + lastElement);
// 첫 번째 요소 제거
int number1 = numbers.pollFirst();
System.out.println("Removed First Element: " + number1);
// 마지막 요소 제거
int number2 = numbers.pollLast();
System.out.println("Removed Last Element: " + number2);
}
}
실행 결과
NavigableSet: [1, 2, 3]
First Element: 1
Last Element: 3
Removed First Element: 1
Removed Last Element: 3
TreeSet에 대해 더 자세히 알아보려면 Java TreeSet을 참조하세요.
이제 NavigableSet 인터페이스에 대해 알게 되었으니, TreeSet 클래스를 사용한 구현에 대해 학습해 보겠습니다.