른록노트

[DataStructure] SotredMap (Java) 본문

Programming/[DataStructure]

[DataStructure] SotredMap (Java)

른록 2022. 1. 12. 21:09

1. SortedMap

Java11

Module java.base
Package java.util
Interface SortedMap<K,​V>

Type Parameters:
K - the type of keys maintained by this map
V - the type of mapped values

All Superinterfaces:
Map<K,​V>

All Known Subinterfaces:
ConcurrentNavigableMap<K,​V>, NavigableMap<K,​V>

All Known Implementing Classes:
ConcurrentSkipListMap, TreeMap
public interface SortedMap<K,​V>
extends Map<K,​V>

키에 대한 전체 순서를 추가로 제공하는 맵입니다.
맵은 키의 자연스러운 순서에 따라 또는 일반적으로 SortedMap 생성 시에 제공되는 Comparator에 의해 정렬됩니다.
이 순서는 SortedMap의 컬렉션 뷰를 반복할 때 반영됩니다.(entrySet, keySet 및 values 메서드에 의해 반환됨).
순서를 활용하기 위해 몇가지 추가 작업이 제공됩니다.(이 인터페이스는 SortedSet의 맵 아날로그입니다.)

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

SortedMap이 Map 인터페이스를 올바르게 구현하려면 SortedMap에 의해 유지되는 순서(명시적 comparator가 제공되는지 여부에 관계없이)는 equals와 일치해야 합니다.(equals와 consistent의 정확한 정의는 Comparable 인터페이스 또는 Comparator 인터페이스를 참조하십시오.)
이는 Map 인터페이스가 equals 연산으로 정의되어 있지만 sortedMap은 compareTo(또는 compare) 메서드를 사용하여 모든 키 비교를 수행하므로 이 메서드에서 동일한 것으로 간주되는 두개의 키는 SortedMap 관점에서 동일합니다. TreeMap의 동작은 순서가 equals와 일치하지 않더라도 잘 정의됩니다. Map 인터페이스의 일반 계약을 따르지 않을 뿐입니다.

모든 범용 SortedMap 구현 클래스는 4개의 "표준" 생성자를 제공해야 합니다.
인터페이스에서 필수 생성자를 지정할 수 없기 때문에 이 권장 사항을 적용할 수 업습니다.
모든 SortedMap 구현에 대해 예상되는 "표준" 생성자는 다음과 같습니다.

  1. 키의 자연스러운 순서에 따라 정렬된 빈 SortedMap을 생성하는 매개변수(인수)가 없는 생성자.
  2. 지정된 Comparator에 따라 정렬된 빈 SortedMap을 만드는 Comparator 유형의 단일 인수가 있는 생성자입니다.
  3. 키의 자연스러운 순서에 따라 정렬된, 해당 인수와 동일한 키-값 매핑을 사용하여 새 맵을 생성하는 Map 유형의 단일 인수가 있는 생성자.
  4. 입력 정렬 맵과 동일한 키-값 매핑 및 동일한 순서로 새 SortedMap을 생성하는 SortedMap 유형의 단일 인수가 있는 생성자.

참고: 여러 메서드는 키 범위가 제한된 서브맵을 반환합니다. 이러한 범위는 반쯤 열려 있습니. 즉, 낮은 끝점은 포함하지만 높은 끝점은 포함하지 않습니다(해당되는 경우).
닫힌 범위(두 끝점 모두 포함)가 필요하고 키 유형으로 지정된 키의 후속 항목을 계산할 수 있는 경우 lowEndpoint에서 후속 항목(highEndpoint)까지의 하위 범위를 요청하기만 하면 됩니다. 예를들어 m이 키가 문자열인 맵이라고 가정합니다. 다음 관용구는 키가 낮음과 높은 사이에 있는 m의 모든 키-값 매핑을 포함하는 view를 얻습니다.

SortedMap<String, V> sub = m.subMap(low, high+"\0");

비슷한 기술을 사용하여 끝점을 포함하지 않는 열린 범위를 생성할 수 있습니다. 다음 관용구는 m의 모든 키-값 매핑을 포함하는 view를 얻습니다. 이 매핑은 키가 낮음과 높음 사이이며 배타적입니다.

SortedMap<String, V> sub = m.subMap(low+"\0", high);

이 인터페이스는 Java Collections Framework의 구성원입니다.
Since:
1.2
See Also:
Map, TreeMap, SortedSet, Comparator, Comparable, Collection, ClassCastException

반응형
Comments