른록노트

[DataStructure] SortedSet (Java) 본문

Programming/[DataStructure]

[DataStructure] SortedSet (Java)

른록 2021. 12. 28. 19:50

1. SortedSet

Java11

Module java.base
Package java.util
Interface SortedSet<E>
Type Parameters:
E - the type of elements maintained by this set
All Superinterfaces:
Collection<E>, Iterable<E>, Set<E>
All Known Subinterfaces:
NavigableSet<E>
All Known Implementing Classes:
ConcurrentSkipListSet, TreeSet
public interface SortedSet<E>
extends Set<E>

2. 설명

요소에 대한 전체 순서를 추가로 제공하는 Set입니다.
요소는 자연적인 순서를 사용하거나 일반적으로 정렬된 집합 생성 시 제공되는 Comparator에 의해 순서가 지정됩니다.
세트의 반복자는 요소 오름차순으로 세트를 순회합니다.
ordering을 활용하기 위해 몇 가지 추가 작업이 제공됩니다. (이 인터페이스는 SortedMap의 설정된 아날로그입니다.)

정렬된 세트에 삽입된 모든 요소는 Comparable 인터페이스를 구현해야 합니다(또는 지정된 comparator에 의해 허용되어야 함).
또한 모든 이러한 요소는 상호 비교 가능해야 합니다. e1.compareTo(e2)(또는 comparator.compare(e1, e2))는 정렬된 집합의 요소 e1 및 e2에 대해 ClassCastException을 throw해서는 안 됩니다. 이 제한을 위반하려고 하면 문제가 되는 메서드 또는 생성자 호출이 ClassCastException을 throw합니다.

정렬된 집합이 Set 인터페이스를 올바르게 구현하려면 정렬된 집합에 의해 유지되는 순서(명시적 comparator에가 제공되는지 여부에 관계없이)는 equals와 일치해야 합니다.
(같음과 일치에 대한 정확한 정의는 Comparable 인터페이스 또는 Comparator 인터페이스를 참조하십시오.) 이는 Set 인터페이스가 equals 연산 측면에서 정의되지만 정렬된 집합이 compareTo(또는 비교) 메서드를 사용하여 모든 요소 비교를 수행하기 때문입니다. 따라서 이 방법으로 동일하다고 간주되는 두 요소는 정렬된 집합의 관점에서 동일합니다.
정렬된 집합의 동작은 순서가 equals와 일치하지 않더라도 잘 정의됩니다. Set 인터페이스의 일반 계약을 따르지 않을 뿐입니다.

모든 범용 정렬 집합 구현 클래스는 4개의 "표준" 생성자를 제공해야 합니다.

1) 요소의 자연스러운 순서에 따라 정렬된 빈 정렬 집합을 생성하는 void(인수 없음) 생성자.
2) 지정된 Comparator에 따라 정렬된 빈 정렬 집합을 만드는 Comparator 유형의 단일 인수가 있는 생성자.
3) Collection 유형의 단일 인수가 있는 생성자, 요소의 자연스러운 순서에 따라 정렬된 인수와 동일한 요소로 새로운 정렬된 세트를 생성합니다.
4) SortedSet 유형의 단일 인수가 있는 생성자, 입력 정렬된 집합과 동일한 요소 및 동일한 순서로 새 정렬된 집합을 생성합니다.
인터페이스에는 생성자가 포함될 수 없으므로 이 권장 사항을 적용할 방법이 없습니다.

참고: 여러 메서드는 제한된 범위의 하위 집합을 반환합니다. 이러한 범위는 반쯤 열려 있습니다. 즉, 낮은 끝점은 포함하지만 높은 끝점은 포함하지 않습니다(해당되는 경우). 닫힌 범위(두 끝점 모두 포함)가 필요하고 요소 유형이 주어진 값의 후속 항목 계산을 허용하는 경우 lowEndpoint에서 후속 항목(highEndpoint)까지의 하위 범위를 요청하기만 하면 됩니다.
예를 들어 s가 정렬된 문자열 집합이라고 가정합니다. 다음 관용구는 s의 모든 문자열을 포함하는 낮은 값에서 높은 값까지 포함하는 보기를 얻습니다.

SortedSet<String> sub = s.subSet(low, high+"\0");

비슷한 기술을 사용하여 끝점을 포함하지 않는 열린 범위를 생성할 수 있습니다. 다음 관용구는 s의 모든 문자열을 포함하는 보기를 낮은
값에서 높은 값까지 배타적으로 가져옵니다.

SortedSet<String> sub = s.subSet(low+"\0", high);

이 인터페이스는 Java Collections Framework의 구성원입니다.

Since:
1.2
See Also
Set, TreeSet, SortedMap, Collection, Comparable, Comparator, ClassCastException

반응형
Comments