Home [Java][Collections] SortedMap 인터페이스
Post
Cancel
Preview Image

[Java][Collections] SortedMap 인터페이스

SortedMap<K,​V> 인터페이스

1
2
public interface SortedMap<K,V>
extends Map<K,V>

가지고 있는 키들에 대해서 total ordering을 제공해주는 Map이다.

  • 키들에 대해서 자연스러운 정렬이나, 생성 시 제공된 Comparator를 통해서 정렬된다.

이러한 정렬은 sorted mapcollections views에 대해서 iterating할 때에도 반영된다.

이 정렬은 반드시 consistent with equals 해야한다.

잠시 consistent with equals를 위해서 equals 메서드를 보겠다.


equals

우선 설명을 보자.

1
2
3
4
5
6
7
The equals method implements an equivalence relation on non-null object references:

It is `reflexive`: for any non-null reference value x, x.equals(x) should return true.
It is `symmetric`: for any non-null reference values x and y, x.equals(y) should return true if and only if y.equals(x) returns true.
It is `transitive`: for any non-null reference values x, y, and z, if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.
It is `consistent`: for any non-null reference values x and y, multiple invocations of x.equals(y) consistently return true or consistently return false, provided no information used in equals comparisons on the objects is modified.
For any non-null reference value x, x.equals(null) should return false.

Object에는 equals라는 메서드가 존재한다.

이 메서드는 not-null object 에 대해서 equivalence relation를 구현한 메서드라고 한다.

???

여기서 equivalence relation이 나올줄은 생각도 못했다.

대충 짚고 넘어가자면, equivalence relationrelationreflexive하고, symmetric하며, transitive하면 equivalence relation라고 한다.

음…! 정리가 된다.

consistent with equals

다시 consistent with equals로 돌아가보자.

그러면 consistent with equals는 다음과 같이 설명된다.

equals를 통한 일관성, 즉 두 객체의 equals의 결과는 언제나 일관된다는 것이다.

equivalence relation을 만족하니, 이해하는데는 무리가 없다.


다시 개념으로 돌아가서, Sorted Map은 정렬에 의해서 키들을 유지하기 때문에 만약 키가 같다면 같은 결과를 리턴해줄 것이다.

생성자

sorted map구현체들은 다음 4가지의 생성자를 반드시 제공해야한다.

  1. 파라미터를 받지 않는 생성자

    • 자연스러운 정렬을 따르는 비어있는 sorted map을 생성한다.
  2. Comparator를 파라미터로 받는 생성자

    • 지정된 comparator로 비어있는 sorted map을 생성한다.
  3. Map을 파라미터로 받는 생성자

    • 같은 키-값 쌍들을 생성하고, 키들을 자연스럽게 정렬해준다.
  4. SortedMap을 파라미터로 받는 생성자

    • 같은 키-값 쌍들 + 파라미터와 같은 정렬로 만들어진 sorted map을 생성한다.

Note

몇 가지 메서드들은 제한된 키 범위의 submap들을 리턴해준다.

이러한 범위들은 half-open이다. [lowEndpoint, highEndpoint) 꼴이라는 의미다.

아래의 연산들은 이산적이라는 가정이 필요하다.

따라서 closed range가 필요하다면, subMap(lowEndpoint, highEndpoint++)를 통해서 사용하면 된다.

만약 open range가 필요하다면, subMap(lowEndpoint++, highEndpoint)를 통해서 사용하면 된다.

References

This post is licensed under CC BY 4.0 by the author.

[Java][Collections] ConcurrentMap 인터페이스와 Memory consistency effects

[Java][Collections] NavigableMap 인터페이스